Embora existam algumas respostas, eu gostaria de adicionar algumas das minhas descobertas também, porque eu estava realmente confuso com o que realmente está sendo compilado, pois em todos os casos, TS
-> a JS
conversão acontece. Estou pegando alguns parágrafos do blog do Jeff como referência.
JIT
O TS
código escrito pelo desenvolvedor é compilado em JS
código. Agora, este js
código compilado é compilado pelo navegador novamente para que html
possa ser renderizado dinamicamente de acordo com a ação do usuário e, consequentemente, os códigos para angular
(para componentes, detecção de mudança, injeção de dependência) também são gerados em tempo de execução.
(O compilador de navegador é o que pega as diretivas e componentes de um aplicativo, junto com seus HTML e CSS correspondentes, e cria fábricas de componentes para eliminar rapidamente as instâncias com toda a lógica de criação de visualização.)
Quando um aplicativo Angular 2 é inicializado no navegador, o compilador JIT executa muito trabalho para analisar os componentes do aplicativo em tempo de execução e gerar código na memória. Quando a página é atualizada, todo o trabalho que foi feito é jogado fora, e o compilador JIT faz o trabalho novamente.
AOT
O TS
código escrito pelo desenvolvedor é compilado para JS
código, este js
já foi compilado para o angular também . Agora, este código compilado js
é compilado pelo navegador novamente para que html
possa ser renderizado. Mas, o problema aqui é que os recursos do angular
já foram tratados pelo AOT
compilador e, portanto, o navegador não precisa se preocupar muito com a criação de componentes, detecção de alterações e injeção de dependência. Então nós temos :
Renderização mais rápida
Com AOT, o navegador baixa uma versão pré-compilada do aplicativo. O navegador carrega o código executável para que possa renderizar o aplicativo imediatamente, sem esperar para compilar o aplicativo primeiro.
Menos solicitações assíncronas
O compilador inline templates HTML externos e folhas de estilo CSS dentro do aplicativo JavaScript, eliminando solicitações separadas de ajax para esses arquivos de origem.
Tamanho menor de download da estrutura Angular
Não há necessidade de baixar o compilador Angular se o aplicativo já estiver compilado. O compilador é quase a metade do próprio Angular, portanto, omiti-lo reduz drasticamente a carga útil do aplicativo.
Detecte erros de modelo mais cedo
O compilador AOT detecta e relata erros de vinculação de modelo durante a etapa de construção antes que os usuários possam vê-los.
Melhor segurança
AOT compila modelos e componentes HTML em arquivos JavaScript muito antes de serem entregues ao cliente. Sem modelos para ler e sem avaliação arriscada de HTML ou JavaScript do lado do cliente, há menos oportunidades para ataques de injeção.
As diferenças restantes já foram abordadas nos tópicos de Benyamin, Nisar e Gaurang.
Sinta-se à vontade para me corrigir