angular - um novo change detection

48
Change Detection

Upload: gustavo-costa

Post on 21-Jan-2018

781 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Angular - Um novo change detection

Change Detection

Page 2: Angular - Um novo change detection

Gustavo CostaDesenvolvedor Front-end na EADBOX

Javascript, AngularJS, Angular, RxJS, Reactive Programming, GDG Organizer

@GustavoCostaW

Page 3: Angular - Um novo change detection
Page 4: Angular - Um novo change detection

Componente 1

Componente 2

Componente 3

Componente 4

Componente 5

Alguma coisa foi alterada!

Change Detection

Page 5: Angular - Um novo change detection

Data bindingL i g a ç ã o d e d a d o s , d o i n g l ê s D a t a b i n d i n g , é u m a

t é c n i c a g e ra l q u e u n e d u a s f o n t e s d e d a d o s /i n f o r m a ç õ e s

e a s m a n t é m e m s i n c ro n i a e m u m p ro c e s s o q u e e s t a b e l e c e u m a c o n e x ã o e n t re U I ( i n t e r f a c e d e u s u á r i o ) d a a p l i c a ç ã o e a l ó g i c a d e n e g o c i o .

W I K I P E D I A

Page 6: Angular - Um novo change detection

Data bindingL i g a ç ã o d e d a d o s , d o i n g l ê s D a t a b i n d i n g , é u m a

t é c n i c a g e ra l q u e u n e d u a s f o n t e s d e d a d o s /i n f o r m a ç õ e s

e a s m a n t é m e m s i n c ro n i a e m u m p ro c e s s o q u e e s t a b e l e c e u m a c o n e x ã o e n t re U I ( i n t e r f a c e d e u s u á r i o ) d a a p l i c a ç ã o e a l ó g i c a d e n e g o c i o .

W I K I P E D I A

Page 7: Angular - Um novo change detection

Data binding

Page 8: Angular - Um novo change detection

AngularJS

ng-clickng-model ….

Page 9: Angular - Um novo change detection

Bidirecional

10 $digest() iterations reached. Aborting!

Page 10: Angular - Um novo change detection
Page 11: Angular - Um novo change detection

React & Virtual DOM

Page 12: Angular - Um novo change detection

Bidirecional

AngularJSUnidirecional

Angular

Page 13: Angular - Um novo change detection

O que causa uma mudança?

Page 14: Angular - Um novo change detection

O que causa uma mudança?

Page 15: Angular - Um novo change detection

Events

click, submit…

E

XHR

Carregar dados de um servidor

X

Timers

setTimeOut, setInterval

T

O que causa uma mudança?

Page 16: Angular - Um novo change detection

Zone.js!

Quem notifica o Angular?

Page 17: Angular - Um novo change detection

Concorrência

Event Loop

Single thread

Page 18: Angular - Um novo change detection
Page 19: Angular - Um novo change detection

Event Loop

Page 20: Angular - Um novo change detection

Zone.JS save us

Page 21: Angular - Um novo change detection

NgZone é um fork do Zone.js

Page 22: Angular - Um novo change detection

const factory = r.resolveComponentFactory(AComponent);

factory.create(injector);

Criação de um componente

Page 23: Angular - Um novo change detection

CheckChanges Process

if (!ChecksEnabled || FirstCheck)

Component State: FirstCheck, ChecksEnabled, Errored, Destroyed

Dispara os lifecycles do component ngOnInit (caso estado seja firstCheck)

Verifica verifica os NodeFlags (slide anterior)

Desabilita CheckEnabled caso o componente seja ChangeDetectionStrategy.OnPush

….

Roda esse mesmo método de maneira recursiva pra todos os seus componentes filhos

Page 24: Angular - Um novo change detection

ChangeDetection.Default

Page 25: Angular - Um novo change detection

Exemplo conceitual Change Detection Angular JS

Page 26: Angular - Um novo change detection

Exemplo conceitual Change Detection Angular

Page 27: Angular - Um novo change detection
Page 28: Angular - Um novo change detection

3x - 10x

Page 29: Angular - Um novo change detection

SMARTER?

Page 30: Angular - Um novo change detection

ChangeDetection.Default

user === valorAntigoDoUser ?

user.name === valorAntigoDoUser.name ? user.email === valorAntigoDoUser.email ?

user.propsInView * n

MUTABILIDADE

Page 31: Angular - Um novo change detection

ChangeDetection.OnPush

user === valorAntigoDoUser ?

run change detection! :-)

IMUTABILIDADE

Page 32: Angular - Um novo change detection

ChangeDetection.OnPush

Page 33: Angular - Um novo change detection

IMUTABILIDADE

Page 34: Angular - Um novo change detection

Immutable.js

Page 35: Angular - Um novo change detection

OBSERVABLESou streams

Page 36: Angular - Um novo change detection

Programação Reativa

Paradigma de programação baseado em fluxos assíncronos de dados, também conhecido como Streams

Implementação do PubSub pattern, também conhecidos como Observers, ou simplesmente callback de eventos

$(document).click( v => console.log(v));document.getElementsByTagName('body')[0].addEventListener( 'click', v => console.log(v));

Page 37: Angular - Um novo change detection

Subscription

Page 38: Angular - Um novo change detection

Nada mudou.

Page 39: Angular - Um novo change detection

Notifique o Angular!

Page 40: Angular - Um novo change detection

markForCheck();

Page 41: Angular - Um novo change detection
Page 42: Angular - Um novo change detection
Page 43: Angular - Um novo change detection

Presentation and container components

Page 44: Angular - Um novo change detection
Page 45: Angular - Um novo change detection
Page 46: Angular - Um novo change detection

4 Componentes container e de apresentação.

3 Observables

2 Imutabilidade

1 ChangeDetectionStrategy.OnPush

Page 47: Angular - Um novo change detection

https://hackernoon.comhttps://blog.thoughtram.io

https://victorsavkin.comhttps://angular.io

Referências

Page 48: Angular - Um novo change detection

@GustavoCostaW