SlideShare uma empresa Scribd logo
Extreme Performance
Gustavo Costa
@willgmbr
N R
Pilares da Performance
Front-end
Network performance Runtime performance
Bundling
1
2 Minification…+
3 Tree-shaking
4 AOT
5 Lazy-load
6 Service Worker
Network performance
W
Webpack
Tools
B
Browserify
R
Rollup
R
SystemJS
G
Gulp
G
Grunt
G
GCC
?
…
#1 Bundling
#1 Bundling
#2 Minification…+
Dead code
Ofuscation
Minification
UglifyJS
#3 Tree Shaking
JIT AoT
#4 AoT
JIT
(Just in time)
Compilation
AoT
(Ahead of time)
Compilation
• Compilamos para gerar um código mais eficiente para as VMs
Compilar?
• Versão 2 > cada componente tem seu PRÓPRIO Change
detector.
• O Angular precisa ‘compilar' todo o template para também
conseguir aplicar o tree shaking
1 2
componente.js
(transpilado do typescript)
Entendendo um
Componente Angular
componente-internal.js
(ngfactory)
my-component
JIT
JIT
(Just in time)
Compilation
my-component.ts my-component.js
…
JIT
JIT
(Just in time)
Compilation
• Baixa todos os Javascripts.
• Angular é iniciado, verifica se é para iniciar em JIT ou AoT.
• Angular precisa compilar TODOS os componentes em JIT
• A aplicação é iniciada.
JIT
JIT
(Just in time)
Compilation
my-component.js
• Angular precisa ‘compilar’
esse template e criar tudo
isso via javascript, nosso
internal component ou
(ngfactory)
• Com isso criar o
Change detector
desse componente.
…
ng serve
• TODO o código do Angular foi IMPORTADO e TODO SEU
COMPILER e suas dependências também.
KEEP CALM!
• Não há ABSOLUTAMENTE NENHUMA técnica de
performance nesse código (minificação, tree shaking
etc…)
• Isso é que faz deixar o ‘auto reload’ rápido desenvolvendo
uma aplicação Angular
AoT
AoT
(Ahead of time)
Compilation
ng serve —aot
ng build—aot
AoT
AoT
(Ahead of time)
Compilation
• Também tem muito benefício em runtime
performance, veremos mais na frente.
JIT AoT
Recap #4 AoT
JIT
(Just in time)
Compilation
AoT
(Ahead of time)
Compilation
Vue
#5 lazy-load
People
Component01 Person
Component
02
People
Module
People
Service
People
Component
Person
Module
Person
Service
Person
Component
App
Component
App
Routing
App
Module
/
/person/:id
lazylazy
eager
#5 lazy-load
Angular  Extreme Performance
Lazy demo
Angular  Extreme Performance
Angular  Extreme Performance
Angular  Extreme Performance
HTTP2
1
2 ServiceWorker
3 Application Shell
4 CacheAPI
5 Pre-fetching
Outras técnicas
easy
Angular CLI
Build time!
ng build --prod
#5 compression
Angular  Extreme Performance
GCC + BROTLI
Angular  Extreme Performance
Em breve teremos hello world do
Angular com apenas:
40kb!
AoT
1
3 Change Detection
4 trackby
5 WebWorkers
Runtime performance
enableProdMode
2
6 Server-side rendering
JIT AoT
#1 AoT
JIT
(Just in time)
Compilation
AoT
(Ahead of time)
Compilation
JIT
JIT
(Just in time)
Compilation
• Baixa todos os Javascripts.
• Angular é iniciado, verifica se é para iniciar em JIT ou AoT.
• Angular precisa compilar TODOS os componentes em JIT
• A aplicação é iniciada.
AoT
AoT
(Ahead of time)
Compilation
• Baixa todos os Javascripts.
• Angular é iniciado, inicia com AoT
• Angular precisa compilar TODOS os componentes em JIT
• A aplicação é iniciada.
JIT
JIT
(Just in time)
Compilation
my-component.ts my-component.js
…
JIT
JIT
(Just in time)
Compilation
my-component.js
…
my-component-
internal.js
JIT
JIT
(Just in time)
Compilation
my-component-
internal.js
create()
JIT
JIT
(Just in time)
Compilation
my-component.tscreate()
JIT
JIT
(Just in time)
Compilation
my-component-
internal.js
detectChanges()
AoT
AoT
(Ahead of time)
Compilation
3x - 10x
#2 enableProdMode
SMARTER?
#3 Change Detection
ChangeDetection.Default
user === valorAntigoDoUser ?
user.name === valorAntigoDoUser.name ?
user.bio === valorAntigoDoUser.bio ?
user.propsInView * n
MUTABILIDADE
ChangeDetection.OnPush
user === valorAntigoDoUser ?
run change detection! :-)
IMUTABILIDADE
ChangeDetection Demo
Notifique o
Angular!
markForCheck();
Angular  Extreme Performance
#4 trackby
#5 WebWorkers
Event Loop
Single thread
#6 Server-side rendering
Angular  Extreme Performance
AoT !== SSR
Otimiza JS Gera HTML/CSS
• Angular universal
Ferramentas
• Vue.js Server-Side
• import ReactDOMServer from 'react-dom/server';
https://github.com/mgechev/angular-performance-checklist
https://blog.thoughtram.io
https://victorsavkin.com
https://twitter.com/jeffbcross
Referências
https://angular.io
Angular  Extreme Performance

Mais conteúdo relacionado

PDF
Angular 2
PDF
GDG Angular 2
PPTX
Migrando para o Angular 2
PDF
Angular 4 Ionic 3 Cordova 5
PPTX
Angular 2, TypeScript e Além
PDF
PDF
Angular 4 - Introdução
PDF
React Native - JSday
Angular 2
GDG Angular 2
Migrando para o Angular 2
Angular 4 Ionic 3 Cordova 5
Angular 2, TypeScript e Além
Angular 4 - Introdução
React Native - JSday

Mais procurados (20)

PDF
Meetup #17
PPTX
BaaS com Firebase 3
PDF
React Native na globo.com
PDF
Angular 2
PDF
Ionic Reativo com RxJS e ngRx
PDF
Projetos reativos com Angular, RxJS e Redux (ngRx)
PDF
Devfest Cerrado: Angular 2
PDF
React + Flux (Alt)
PDF
Angular 2 em 60 minutos
PPTX
JS Experience 2017 - React + Redux. Pensando em Redux
PDF
DevFest Nordeste: Ionic 2
PDF
Typescript: the Fun Parts (BrazilJS 2017)
PPTX
Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!
PDF
DevFest BH: Ionic 2
PDF
Android DevConference - Dagger 2: uso avançado em projetos Android
PDF
Open Source Mobile Experience: Ionic 2
PDF
Primeiros passos com promessas no AngularJS
ODP
Android Studio: Primeiros Passos
PDF
React Native - Experiência Nativa para o usuário e experiência Web para o des...
PDF
Introdução ao Flyway
Meetup #17
BaaS com Firebase 3
React Native na globo.com
Angular 2
Ionic Reativo com RxJS e ngRx
Projetos reativos com Angular, RxJS e Redux (ngRx)
Devfest Cerrado: Angular 2
React + Flux (Alt)
Angular 2 em 60 minutos
JS Experience 2017 - React + Redux. Pensando em Redux
DevFest Nordeste: Ionic 2
Typescript: the Fun Parts (BrazilJS 2017)
Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!
DevFest BH: Ionic 2
Android DevConference - Dagger 2: uso avançado em projetos Android
Open Source Mobile Experience: Ionic 2
Primeiros passos com promessas no AngularJS
Android Studio: Primeiros Passos
React Native - Experiência Nativa para o usuário e experiência Web para o des...
Introdução ao Flyway
Anúncio

Destaque (9)

PDF
Por que Stanford trocou Java por JavaScript?
PDF
Angular - Um novo change detection
PDF
Ionic 2 como ferramenta para desenvolvimento móvel
PPTX
Angular vs. React
PPTX
Introduction to Angularjs
PDF
Angular Seminar [한빛미디어 리얼타임 세미나]
PDF
Building Universal Applications with Angular 2
PDF
Getting Started with Angular 2
ODP
Introduction to Angular 2
Por que Stanford trocou Java por JavaScript?
Angular - Um novo change detection
Ionic 2 como ferramenta para desenvolvimento móvel
Angular vs. React
Introduction to Angularjs
Angular Seminar [한빛미디어 리얼타임 세미나]
Building Universal Applications with Angular 2
Getting Started with Angular 2
Introduction to Angular 2
Anúncio

Semelhante a Angular Extreme Performance (20)

ODP
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
PPTX
Strider CD - Deploy Contínuo com JavaScript
PDF
Apache Wicket derruba o padrão JSF
PPTX
PDF
TDC2018SP | Trilha Serveless - Pra que SERVErless?
PPTX
Deploy automático em projeto PHP - PHPSPIMA 2016
PDF
CPqD Developer Suite - SPIN Campinas - Reunião #56
PDF
Introdução à Programação Web com Angular
PDF
Twitter, Apache Camel e Enterprise Integration Patterns
PDF
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...
ODP
Putting a-heat-with-thermostat
PPTX
Integração Contínua
PDF
Novidades PHP 7.4 e 8.0!
PDF
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
PDF
Resumo Sessão Técnica "ArcGIS 10.1 Desktop Developer Migration Topics" do ESR...
PPSX
TDC2018SP | Trilha Arq .Net - Performance e feature
PDF
Desenvolvimento Ágil de Aplicações Java na Nuvem com o AWS Elastic Beanstalk
PDF
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
PPTX
Como desenvolver com um sistema com um front-end colossal?
PPTX
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
Strider CD - Deploy Contínuo com JavaScript
Apache Wicket derruba o padrão JSF
TDC2018SP | Trilha Serveless - Pra que SERVErless?
Deploy automático em projeto PHP - PHPSPIMA 2016
CPqD Developer Suite - SPIN Campinas - Reunião #56
Introdução à Programação Web com Angular
Twitter, Apache Camel e Enterprise Integration Patterns
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...
Putting a-heat-with-thermostat
Integração Contínua
Novidades PHP 7.4 e 8.0!
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Resumo Sessão Técnica "ArcGIS 10.1 Desktop Developer Migration Topics" do ESR...
TDC2018SP | Trilha Arq .Net - Performance e feature
Desenvolvimento Ágil de Aplicações Java na Nuvem com o AWS Elastic Beanstalk
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
Como desenvolver com um sistema com um front-end colossal?

Mais de Gustavo Costa (8)

PPTX
Trabalho remoto + Carreira Internacional em T.I
PDF
Angular Extreme Performance - V2
PDF
Google Calendar API - Getting Started
PDF
Getting Started with NgRx (Redux) Angular
PDF
Angular.JS - Estado Atual
PPTX
Desenvolvendo APPs Com Angular.JS + Cordova
PPTX
Abra sua cabeça, apps híbridos - PhoneGap/Cordova
PPTX
Mobile - Abra sua cabeça.
Trabalho remoto + Carreira Internacional em T.I
Angular Extreme Performance - V2
Google Calendar API - Getting Started
Getting Started with NgRx (Redux) Angular
Angular.JS - Estado Atual
Desenvolvendo APPs Com Angular.JS + Cordova
Abra sua cabeça, apps híbridos - PhoneGap/Cordova
Mobile - Abra sua cabeça.

Último (19)

PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Apple Pippin Uma breve introdução. - David Glotz
Custos e liquidação no SAP Transportation Management, TM130 Col18
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Aula 18 - Manipulacao De Arquivos python
Processos na gestão de transportes, TM100 Col18
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Aula04-Academia Heri- Tecnologia Geral 2025
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
COBITxITIL-Entenda as diferença em uso governança TI
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...

Angular Extreme Performance