SlideShare una empresa de Scribd logo
1 de 92
Descargar para leer sin conexión
React-volution
Sergio Borromei
sergiob@lagash.com
Tech Fellow @ Lagash
Embrace the challengelagash.com
Embrace the challengelagash.com
Embrace the challengelagash.com
``
Tus nuevos usuarios son expertos… y muy
exigentes
lagash.com
¿Cómo llegamos hasta
acá?
0
50
100
150
200
250
300
350
400
450
500
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
JS Request Size
ECMAScript 3 ECMAScript 5
ECMAScript 4
abondoned
lagash.com
¿Cómo era programar la
web en 2004?
if {
?>
<? ?>
} else {
?>
form
input
input
form
}
if {
echo { }
} else {
echo
form
input
input
form
}
Markup:
ciudadano de
primera clase
Contenido
“escapeado” por
defecto en
compilación
if {
salute
} else {
$content = <askNameForm
text=“What’s your name” />;
}
echo $content;
Componentización
del markup
2011 : Contexto
• Cantidad de “mobile users”s acercando a “desktop
users”
• Notificaciones y eventos real time
• “Dynamic Web Applications” & “Single Page
Applications”
• Necesidad de evitar roundtrips para el rendering de
HTML
• Necesidad de una forma mas sencilla de desarrollar
aplicaciones complejas
ReactJS
En 2011 un desarrollador que
trabajaba en Facebok-Ads
negocia con su jefe seis meses
para intentar portar XHP a
JavaScript.
Ese desarrollador es Jordan
Walke
6 meses mas tarde…
• React es integrado en el news-feed de Facebook
• 1 año después:
• Es integrado al news-feed de Instagram
• En 2013
• Se anuncia como Open Source en JSConf
• En 2015
• Se libera React Native, la versión para desarrollo
de aplicación móviles y de escritorio.
lagash.com
¿Pero qué problema
resuelve React?
DOM rendering (server side)
Hola Sergio!
DOM mutation (client side)
Hola Sergio!
Implementación naive: reemplazar DOM
Muchos problemas!!
• DOM guarda mucho estado
• Foco y selección de los inputs
• Posición del scroll
• iFrames
• Parte de ese estado está oculto o es
inaccesible
Solución: re-usar nodos
n1
n2 n3
n4
n1
n2 n3
n4 n5
Solución: re-usar nodos
n1
n2 n3
n4
n1
n2 n3
n4n5
Diff algorithms
Diff Algorithms
• Los algoritmos que existían eran de un orden
O(n3)
• n es la cantidad de elementos a comparar
• 1000 elementos requiere 1000 millones de
comparaciones.
• A una velocidad de 1GHz, esto es algo así como:
• 1000 segundos => 17 minutos!
Reconciliation
• React utiliza un algoritmo heurístico de un orden
o(n) asumiendo dos cosas:
• Dos elementos de diferente tipo producen
árboles diferentes
• El desarrollador puede indicar que
elementos se mantendrán estables
(pruning)
https://facebook.github.io/react/docs/reconciliation.html
Pruning
n1
n2 n3
n4 n5 n6
n7 n8
bool shouldComponentUpdate(props, state);
Mas problemas…
document.createElement(‘div’);
Virtual DOM
n1
n2 n3
n4
n1
n2 n3
n4n5 n6 n7
n5
n6
n7
Mutations
Batching
n1
n2 n3
n4 n5
lagash.com
Quick demo
such wow
much component
very reactive
so ES6
lagash.com
Props vs State
Props
• Es la “configuración” del componente
• Recibida desde un componente de orden
superior
• Son inmutables
• Un componente no puede cambiar sus propias
propiedades
• Si puede cambiar las propiedades que le pasa a
componentes de orden inferior
State
• Representa los datos variables del componente
• Es mutable
• setState(newState)
• No todos los componentes requieren de estado
• Stateless components
Aspectos comunes
• Ambos son objetos JS planos
• Cambios en cualquiera de ellos disparan un
Render()
• Determinismo
• Misma combinación de props y state debe
producir la misma salida
lagash.com
Component Lificycle
Embrace the challengelagash.com
Tres fases principales
Initialization State Changes Prop Changes
Embrace the challengelagash.com
Initialization
Embrace the challengelagash.com
State Changes
Embrace the challengelagash.com
Props Changes
function newMessageHandler(message) {
var chatTab = ChatTabs.getChatTab(message.threadID);
chatTab.appendMessage(message);
}
Agregar el
mensaje al tab
de chat
function newMessageHandler(message) {
UnseenCount.incrementUnseen();
var chatTab = ChatTabs.getChatTab(message.threadID);
chatTab.appendMessage(message);
if (chatTab.hasFocus) {
UnseenCount.decrementUnseen();
}
}
Incrementar
mensajes no
vistos
Decrementar si
el usuario está
viendo el chat
function newMessageHandler(message) {
UnseenCount.incrementUnseen();
var chatTab = ChatTabs.getChatTab(message.threadID);
chatTab.appendMessage(message);
var messagesView = Messages.getOpenView();
var threadID = MessagesView.getThreadID();
if (threadID == message.threadID) {
messagesView.appendMessage(message);
}
if (chatTab.hasFocus ||
threadID == message.threadID) {
UnseenCount.incrementUnseen();
}
}
Agregar el
mensaje a la
vista principal
de mensajes
El problema de MVC, MVVM, MVP, MV*
Notifies changes / updates
notifies user
actions
retireves,
creates &
updates
spawn
views
notifies
model
changes
El problema de MVC, MVVM, MVP, MV*
Flux
• Almacena el estado de la
aplicación.
• “Registra” callbacks al
dispatcher para ser
notificado de los eventos
(acciones) que ocurrieron.
• Modifica el estado
“Dispara” nuevas
acciones como
producto de las
interacciones del
usuario
• Coordina los cambios
de estado (“traffic
control”)
• Evita la existencia de
efectos “cascada”
Flux
lagash.com
Flux demo
such wow
much dispatched
very reactive
so flux
Stores dissected
• Encapsulan el estado de la aplicación
• Desde afuera del store nunca se accede al estado directamente
• Componentes y vistas acceden mediante métodos
• Los cambios de estado son comunicados emitiendo eventos
• extends EventEmitter
• Implementan un método para “atender” las acciones que
llegan desde el dispatcher
• handleActions(action)
• Deben registarse con el dispatcher para recibir acciones
• dispatcher.register(store.handleActions())
Todo esto podríamos “reducirlo” a…
(state, action) => state
Todo esto podríamos “reducirlo” a…
(acc, val) => acc
Todo esto podríamos “reducirlo” a…
reduce((acc, val) => acc)
¡Es un reducer!
const actions = [
{
id: 1,
type: “CREATE_TODO”,
text: “Aprender ReactJS”
},
{
id: 2,
type: “CREATE_TODO”,
text: “Aprender Flux”
},
{
id: 3,
type: “CREATE_TODO”,
text: “Aprender Redux”
},
{
type: “DELETE_TODO”,
id: 2
}
actions.reduce(todosReducer, [])
[
{
id: 1,
text: "Aprender ReactJS",
complete: false
},
{
id: 3,
text: "Aprender Redux",
complete: false
},
]
Redux
• Inventado por Dan Abramov,
el creador de…
• React Hot Loader
• create-react-app
• React DnD
lagash.com
Redux demo
such wow
much reduced
very reactive
so redux
lagash.com
Reconciliation & Rendering
Reconciliation vs. Rendering
Reconciliation vs. Rendering
Learn once, write anywhere.
• React Native facts…
• Compila JSX a código nativo
• Permite integrar componentes nativos
escritos en otros lenguajes
• Swift, Objective-C, Java
• Muy buenas herramientas
• create-react-native-app
• HOT RELOADING!!
lagash.com
React Native
quick demo
such wow
much mobile
very reactive
so native
Reconciliation vs. Rendering
Reconciliation vs. Rendering
Stack Reconciler
• Actualmente usado en producción por todas las
aplicaciones React
• Escrito bajo el paradigma “object oriented”
• Host components
• Composite components
• Los updates de UI se hacen de manera recursiva
todos los composite components
Limitaciones
• Jerarquías muy profundas + CPU limitado
pueden generar efectos no deseados
• No hay forma de distinguir que trabajo
computacional es mas prioritario
• No hay forma de dividir el trabajo
computacional en partes
El futuro (cercano) según Mark…
Reconciliation vs. Rendering
Fiber Reconciler
• Re-write del algoritmo de reconciliación
orientado a que los desarrolladores piensen en
la priorización desde el diseño
• Provee las capacidades para:
• Priorizar trabajo (scheduling)
• Particionar trabajo (work chunks)
lagash.com
It’s Fiber ready?
lagash.com
Conclusión
Argentina | Buenos Aires
+54 (11) 4982 4185
info@lagash.com
Chile | Santiago de Chile
+56 (2) 2231 9428
info_chile@lagash.com
Colombia | Bogotá
+57 (1) 750 5276
info_colombia@lagash.com
México | México DF
+52 (55) 6394 0617
info_mexico@lagash.com
USA | Seattle - US
+1 844 4 Lagash
infousa@lagash.com
Uruguay | Montevideo
+598 2623 2546
info_uy@lagash.com
Let’s keep in touch

Más contenido relacionado

La actualidad más candente

Exploramos Wireframes & Prototipos con UX Designer Chris Berber de iTexico
Exploramos Wireframes & Prototipos con UX Designer Chris Berber de iTexicoExploramos Wireframes & Prototipos con UX Designer Chris Berber de iTexico
Exploramos Wireframes & Prototipos con UX Designer Chris Berber de iTexico
Omar Corona
 

La actualidad más candente (20)

Taller: Kanban Avanzado. Superando el Limitar el WIP
Taller: Kanban Avanzado. Superando el Limitar el WIPTaller: Kanban Avanzado. Superando el Limitar el WIP
Taller: Kanban Avanzado. Superando el Limitar el WIP
 
Tw ¿Por qué elegir ágil?
Tw   ¿Por qué elegir ágil? Tw   ¿Por qué elegir ágil?
Tw ¿Por qué elegir ágil?
 
DEISER expoQA 2017
DEISER expoQA 2017DEISER expoQA 2017
DEISER expoQA 2017
 
Que es Scrum?
Que es Scrum?Que es Scrum?
Que es Scrum?
 
Introducción a kanban en la gestión de proyectos
Introducción a kanban en la gestión de proyectosIntroducción a kanban en la gestión de proyectos
Introducción a kanban en la gestión de proyectos
 
Yo soy Dev, yo soy Ops y somos dos en un equipo
Yo soy Dev, yo soy Ops y somos dos en un equipoYo soy Dev, yo soy Ops y somos dos en un equipo
Yo soy Dev, yo soy Ops y somos dos en un equipo
 
¿Quality Control = Project Control?
¿Quality Control = Project Control?¿Quality Control = Project Control?
¿Quality Control = Project Control?
 
Cobertura de código con test funcionales para superhéroes
Cobertura de código con test funcionales para superhéroesCobertura de código con test funcionales para superhéroes
Cobertura de código con test funcionales para superhéroes
 
SOFT SKILLS: Habilidades para cotizarse mejor
SOFT SKILLS: Habilidades para cotizarse mejorSOFT SKILLS: Habilidades para cotizarse mejor
SOFT SKILLS: Habilidades para cotizarse mejor
 
Inceptions
InceptionsInceptions
Inceptions
 
Panel Magmaconf
Panel MagmaconfPanel Magmaconf
Panel Magmaconf
 
La experiencia agile de softeng en el desarrollo de Portal Builder
La experiencia agile de softeng en el desarrollo de Portal BuilderLa experiencia agile de softeng en el desarrollo de Portal Builder
La experiencia agile de softeng en el desarrollo de Portal Builder
 
Bilbostack 2020 - El camino de l a entrega en DevOps
Bilbostack 2020 - El camino de l a entrega en DevOpsBilbostack 2020 - El camino de l a entrega en DevOps
Bilbostack 2020 - El camino de l a entrega en DevOps
 
Lean & kanban: introducción
Lean & kanban: introducciónLean & kanban: introducción
Lean & kanban: introducción
 
Éxitos y desastrosas experiencias con el agilismo en la gestión de proyectos ...
Éxitos y desastrosas experiencias con el agilismo en la gestión de proyectos ...Éxitos y desastrosas experiencias con el agilismo en la gestión de proyectos ...
Éxitos y desastrosas experiencias con el agilismo en la gestión de proyectos ...
 
Presentación de Compañía
Presentación de CompañíaPresentación de Compañía
Presentación de Compañía
 
Atlantica conf 2019 no estas preparado para migrar al cloud
Atlantica conf 2019   no estas preparado para migrar al cloudAtlantica conf 2019   no estas preparado para migrar al cloud
Atlantica conf 2019 no estas preparado para migrar al cloud
 
SCRUMBAN aplicado a equipos de Soporte y Mantenimiento
SCRUMBAN aplicado a equipos de Soporte y MantenimientoSCRUMBAN aplicado a equipos de Soporte y Mantenimiento
SCRUMBAN aplicado a equipos de Soporte y Mantenimiento
 
Exploramos Wireframes & Prototipos con UX Designer Chris Berber de iTexico
Exploramos Wireframes & Prototipos con UX Designer Chris Berber de iTexicoExploramos Wireframes & Prototipos con UX Designer Chris Berber de iTexico
Exploramos Wireframes & Prototipos con UX Designer Chris Berber de iTexico
 
¡A todo Kanban! ~ Introducción a kanban
¡A todo Kanban! ~ Introducción a kanban¡A todo Kanban! ~ Introducción a kanban
¡A todo Kanban! ~ Introducción a kanban
 

Similar a Reactvolution

Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Andrés Iturralde
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
Steven Gomez
 
Creación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y ExpressCreación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y Express
betabeers
 
Asincronía en la web: Conociendo las novedades de ASP .NET 4.5
Asincronía en la web: Conociendo las novedades de ASP .NET 4.5Asincronía en la web: Conociendo las novedades de ASP .NET 4.5
Asincronía en la web: Conociendo las novedades de ASP .NET 4.5
Andrés Iturralde
 

Similar a Reactvolution (20)

Mobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloMobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vuelo
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
2018.sps madrid.spfx workshop
2018.sps madrid.spfx workshop2018.sps madrid.spfx workshop
2018.sps madrid.spfx workshop
 
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
 
Conoce lo nuevo en RAD Studio, C++ Builder y Delphi 10.2.2
Conoce lo nuevo en RAD Studio, C++ Builder y Delphi 10.2.2Conoce lo nuevo en RAD Studio, C++ Builder y Delphi 10.2.2
Conoce lo nuevo en RAD Studio, C++ Builder y Delphi 10.2.2
 
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
 
FULLSTACK JS DEV in 2017
FULLSTACK JS DEV in 2017FULLSTACK JS DEV in 2017
FULLSTACK JS DEV in 2017
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
 
Primeros pasos con Backbone js, por Xavier Aznar
Primeros pasos con Backbone js, por Xavier AznarPrimeros pasos con Backbone js, por Xavier Aznar
Primeros pasos con Backbone js, por Xavier Aznar
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
 
Creación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y ExpressCreación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y Express
 
React
ReactReact
React
 
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
 
Asincronía en la web: Conociendo las novedades de ASP .NET 4.5
Asincronía en la web: Conociendo las novedades de ASP .NET 4.5Asincronía en la web: Conociendo las novedades de ASP .NET 4.5
Asincronía en la web: Conociendo las novedades de ASP .NET 4.5
 
SignalR y dispositivos móviles
SignalR y dispositivos móvilesSignalR y dispositivos móviles
SignalR y dispositivos móviles
 
Introducción a SharePoint Framework
Introducción a SharePoint FrameworkIntroducción a SharePoint Framework
Introducción a SharePoint Framework
 
01 Ext Js Introduccion
01 Ext Js   Introduccion01 Ext Js   Introduccion
01 Ext Js Introduccion
 

Más de _Lagash (6)

Ai experience
Ai experienceAi experience
Ai experience
 
Rebotlution
RebotlutionRebotlution
Rebotlution
 
Rsk presentation v lagash
Rsk presentation v lagashRsk presentation v lagash
Rsk presentation v lagash
 
Devops talk
Devops talkDevops talk
Devops talk
 
Programando Juegos Holográficos con Unity
Programando Juegos Holográficos con UnityProgramando Juegos Holográficos con Unity
Programando Juegos Holográficos con Unity
 
Meetup UX UI
Meetup UX UIMeetup UX UI
Meetup UX UI
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (15)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Reactvolution