performance com · 2015-05-27 · #gde angularjs. quando o seu app está realmente lento? como...

71
Performance com Wilson Mendes @willmendesneto

Upload: others

Post on 09-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Performance com

Wilson Mendes @willmendesneto

Page 2: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 3: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Wilson Mendes @willmendesneto

#developer #opensource #comunidades #GDE AngularJS

Page 4: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Quando o seu app está REALMENTE lento?

Page 5: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 6: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 7: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Como otimizar a performance do seu app?

Page 8: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 9: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

+ máquinas + cache

+ minificação + async

+ SPDY/HTTP 2.0

Page 10: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 11: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Real-time web Atualizar a página em menos de 100ms para

passar a sensação de real time

Page 12: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Fluxo de uma

APLICAÇÃO

Page 13: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Devs não precisam saber como o AngularJS faz por debaixo do pano

Two-way data binding

Page 14: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

$rootScope pega as informações e atualiza os $scopes

(ao infinito e além)

$rootScope/$scope life cycle

Page 15: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Dirty Checking: Herói e Vilão

Page 16: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 17: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 18: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 19: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 20: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 21: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 22: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

#WHAT

Page 23: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Use $emit ao invés de $broadcast

Minimize os binds/watchers

Maximize os binds/watchers registrados

Como fugir disso?

Page 24: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Use observers ao invés de dirty checking

ES6

Transpilers: #WorkInProgress

Observer

Page 25: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Use ng-if ao invés de ng-show

(ng-show não mostra o elemento, mas o two-way binding já está ativo)

Táticas

Page 26: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Táticas

Page 27: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Não use ng-includes em loops (ng-repeat)

Táticas

Page 28: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Manipule as propriedades e repasse ao template a informação

Evite filtrar/tratar dados no template

Táticas

Page 29: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Táticas

Page 30: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Táticas

Page 31: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Táticas

Page 32: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Bad idea =(

Page 33: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 34: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Good idea :D

Page 35: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 36: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

One-time binding

Page 37: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Immutable Data

Estado não pode ser alterado após criação

Thread safe (sem alterações)

Bons para se usar como chave hash

Page 38: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Mori.js

Baseada em ClojureScript’s

Imutabilidade

Page 39: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Immutable.js

Immutable.js fits better with the rest of the JS ecosystem in my opinion, because it is designed

for and written in JS, rather than ClojureScript. The API follows the native Array API where possible, so

it's a lot easier to switch between the two.

Lee Byron, Interactive Information Designer at Facebook

Page 40: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

http://jsperf.com/immutablejs-versus-morijs

Page 41: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Angular-immutable

http://blog.mgechev.com/2015/03/02/immutability-in-angularjs-immutablejs/

Page 42: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Prós Contras

Melhoria na performance de grandes informações

Tende a ser menos performático com poucas

informações

Page 43: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Paginação Scroll

Reactive Programming

#Lazyweb

Page 44: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Paginação Scroll

Reactive Programation

Page 45: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 46: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Paginação Scroll

Reactive Programation

Page 47: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Angular directive

Page 48: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Angular + React

Page 49: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

===

Page 50: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Todas as otimizações para o Javascript se aplicam ao AngularJS

(ou qualquer outro framework)

Javascript optimization

Page 51: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Lodash.js x Ramda.js

http://jsperf.com/ramdajs-x-lodashjs

Page 52: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Memoization

Page 53: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Debounce

Page 54: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Com Sem

Page 55: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Altere o comportamento de cache no AngularJS, dentre outras possibilidades

$provider.decorate()

Page 56: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 57: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

https://github.com/willmendesneto/angular-performance

Angular Performance

Page 58: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Evite otimizações prematuras

Otimizar é algo contínuo

prematuras

Page 59: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Quem pode me auxiliar?

Page 60: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 61: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Perf.Rocks

Page 62: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 63: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP
Page 64: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Performance para testes?

Page 65: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

$log ao invés de console

$timeout ao invés de setTimeout

$interval ao invés de setInterval

Test ++

Page 66: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Benchpress

Page 67: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Karma-coverage

Page 68: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

Gremlins.js

Page 69: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

https://github.com/willmendesneto/angular-testing-recipes

Quer saber mais?

Page 70: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

#PERFMATTERS

Page 71: Performance com · 2015-05-27 · #GDE AngularJS. Quando o seu app está REALMENTE lento? Como otimizar a performance do seu app? + máquinas + cache + minificação + async + SPDY/HTTP

#obrigado

Wilson Mendes @willmendesneto