SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Single Page Applications
Marc Torrent
¿Por qué necesitamos las SPA si ya
teníamos nuestro sitio web bien
diseñado con una navegación clara e
indexable por los buscadores?
¿Por qué?
- Desacoplar la lógica de servidor y todas las operaciones
de Back-end de las que son puramente informacionales o
de presentación (Front-end)
- Permite centrarnos en la usabilidad de la aplicación y así
mejorar la experiencia de usuario
- Nos permite aplicar mejores patrones de diseño tanto en
Front-end como en Back-end
- Son más rápidas por el hecho que la información
transmitida en ambos canales es menor y además expone
varias técnicas de optimización.
- Son más fáciles de mantener y testear
¿Cuáles son las bases para construir
una SPA?
Bloques SPA
REST INTERFACE
BBDD
OPERACIONES
SERVER
FAÇADE
CLIENT
VIEWS
CONTROLLERS
MODELS
ROUTING
AJAX
Bloques SPA - Server Façade
- Servidor que provea los recursos estáticos:
- Vistas
- Templates
- Página Inicial
- Estilos
- Lógica (JS)
- Repositorio de Datos - Modelos
- Operaciones REST
- Modelos
- Controladores - Acciones
- Gestión Sesión - Autentificación
Bloques SPA - Cliente
- Sistema de navegación - ROUTER
- Gestión del History
- Hashtags
- Navegación HTML5 - Bookmarking
- Gestión Templates
- Obtención del Server Façade
- Gestión de los controladores asociados
- Patrón de diseño:
- MVC / MVP
- MVVM
- Gestión Utilidades:
- Traducciones
- Acceso LocalStorage
- Cookies
- Data Layer
- Network Layer
Hablemos de AJAX
AJAX Tips
- Utilizar JSON como formato de los datos de transporte
- Content-Type: application/json
- Accept: application/json
- Headers extra para autentificación
- Cuidado con HTTPS desde HTTP
- No va a ser posible por considerarse un CrossDomain
request. Utilizamos iFrame auxiliar cargado por
HTTPS y la aplicación se comunica con este iFrame
por postMessage. Es el iFrame el que realizará las
comunicaciones AJAX.
- Cuidado con CORS: Cross Origin Resource Sharing
- Respuestas comprimidas en GZIP.
Patrones
MVC - MVP - MVVM
Model - View- Controller
Model View
Controller
Render
UI Actions
What to Do
Update
Model - View - Presenter
Model ViewPresenter
Update setData()
UI Events
Render
View
Update
View
Data Service Layer
Model - View - ViewModel
Model
View
ViewModel
ViewModel
State
UI Actions
What to Do
Update
Render
Retrieve Data
Model Subset
2-Way Data
Binding
SPA Routing: Características y
aproximación con PageJS
SPA - Routing
- Deben gestionar el binomio URL - Vista
- Diccionario URL - Vista - Controlador
- Uso de api HTML5 de History o Downgrade a Hashbangs
- Concepto de Estado de una URL-Vista
- Navegación atrás: onPopState
- Navegación hace delante: pushState
- Navegación sintética:
- Renderización de Vistas
- Activación de lógica de cliente para cada vista
- Gestión de estilos
- Gestión propia de la aplicación
PageJS
- page({options}) → Configura el sistema de navegación
- page(url, callback) → Añade entrada al diccionario url-
acción
- page(url) → Navegación hacia la url
- page.start() → Inicia el sistema de navegación
- page.stop() → Detiene el sistema de navegación. No
pierde las entradas url-acción del diccionario
- Las rutas deben definirse en un único punto y deben de
ser únicas
- La url puede contener expresiones regulares,
conteniendo parámetros que se pueden pasar a la
callback. Ejemplo: route: 'premium/pedido/:orderId'
Las SPA no tienen nada en contra???
No es oro todo lo que reluce...
- Alta complejidad técnica:
- Sistema de routing adaptado a las necesidades de la
aplicación
- Uso de analytics más complejo por la navegación
sintética
- Los diseñadores no están preparados técnicamente y
deben trabajar sobre maquetas que después son
integradas por los desarrolladores
- No amigable para los robots y spiders de los buscadores
- JS sin memory leaks porque sino…
- Falta de sincronismo con el servidor en navegación
tradicional
- Primera carga en blanco + Loading…
- El navegador debe tener JS activado
Navegador sin JS activado
NO HAY MÁS LLAMADAS ….
Diseñadores no preparados
BIENVENIDOS A LOS WORKSHOPS!!!
Arquitectura que funciona (I)
- El Servidor Façade debe proporcionarnos las páginas
como si fuera navegación tradicional:
- customRender: Método que tiene en cuenta si
estamos navegando por AJAX o es un refresco.
- Incluye la VISTA + DataLayer
- El cliente se “engancha” a la vista + datos cuando
refrescamos - Evita la página en blanco + Loading...
- El cliente se divide en controladores de página o grandes
secciones de una página y todos los elementos con
interacción se controlan como widgets los cuales son
orquestrados por el controlador principal
- El router solicita páginas al servidor y parsea en busca de
controladores de página para activarlos pasándole el
DataLayer
Arquitectura que funciona (II)
PAGE REFRESH
SERVER FAÇADE
Obtain
Data
Render
Template
with Data
Flush
Both
Presentation
Layer HTML
Data Layer
JSON
CUSTOM RENDER - NON XHR REQUEST
CLIENT
CONTROLLERS MANAGER
PARSE
VIEW
SYNC
DATA
START
CONTROLLERS
ROUTING ENGINE
START ENGINE
Arquitectura que funciona (III)
CLIENT SIDE
NAVIGATION
SERVER FAÇADE
Obtain
Data
Obtain
Compiled
Template
Flush
Both
Presentation
Layer JS
Data Layer
JSON
CUSTOM RENDER - XHR REQUEST
CLIENT
CONTROLLERS MANAGER
PARSE
VIEW
SYNC
DATA
START
CONTROLLERS
ROUTING ENGINE
REQUEST PAGE
RENDER VIEW
CONTR. MANAGER
THANKS FOR YOUR ATTENTION!
Give your questions on the comments section
Workshop 7: Single Page Applications

Contenu connexe

Tendances

JSP Objetos
JSP ObjetosJSP Objetos
JSP ObjetosNatyhn
 
09b jsf (1)
09b jsf (1)09b jsf (1)
09b jsf (1)UTN
 
componentes de jsp
componentes de jsp componentes de jsp
componentes de jsp Angie2331
 
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-20064. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006Samuel Marrero
 
Introducción a AngularJS
Introducción a AngularJSIntroducción a AngularJS
Introducción a AngularJSAdrián Paredes
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)Daryl Moreno
 
Etiquetas básicas jsf
Etiquetas básicas jsfEtiquetas básicas jsf
Etiquetas básicas jsflauritat_9
 
ASP.NET MVC - layouts y vistas parciales
ASP.NET MVC - layouts y vistas parcialesASP.NET MVC - layouts y vistas parciales
ASP.NET MVC - layouts y vistas parcialesDanae Aguilar Guzmán
 
Jsp(java server pages)
Jsp(java server pages)Jsp(java server pages)
Jsp(java server pages)diegob1098
 
Componentes en angularjs 1.5
Componentes en angularjs 1.5Componentes en angularjs 1.5
Componentes en angularjs 1.5Hugo Biarge
 
Elementos de JSP
Elementos de JSPElementos de JSP
Elementos de JSPlauijure
 
ASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web apiASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web apiDanae Aguilar Guzmán
 
Ejercicio basico jsf’s
Ejercicio basico jsf’sEjercicio basico jsf’s
Ejercicio basico jsf’sayreonmx
 
STRUTS (MVC e Java)
STRUTS (MVC e Java)STRUTS (MVC e Java)
STRUTS (MVC e Java)ousli07
 

Tendances (20)

JSP Objetos
JSP ObjetosJSP Objetos
JSP Objetos
 
09b jsf (1)
09b jsf (1)09b jsf (1)
09b jsf (1)
 
06. jsf (java server faces) (1)
06. jsf (java server faces) (1)06. jsf (java server faces) (1)
06. jsf (java server faces) (1)
 
componentes de jsp
componentes de jsp componentes de jsp
componentes de jsp
 
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-20064. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
 
Introducción a AngularJS
Introducción a AngularJSIntroducción a AngularJS
Introducción a AngularJS
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
 
Aplicaciones Web
Aplicaciones WebAplicaciones Web
Aplicaciones Web
 
Etiquetas básicas jsf
Etiquetas básicas jsfEtiquetas básicas jsf
Etiquetas básicas jsf
 
ASP.NET MVC - layouts y vistas parciales
ASP.NET MVC - layouts y vistas parcialesASP.NET MVC - layouts y vistas parciales
ASP.NET MVC - layouts y vistas parciales
 
Curso JSF - Conceptos Basicos
Curso JSF - Conceptos BasicosCurso JSF - Conceptos Basicos
Curso JSF - Conceptos Basicos
 
Jsp(java server pages)
Jsp(java server pages)Jsp(java server pages)
Jsp(java server pages)
 
Componentes en angularjs 1.5
Componentes en angularjs 1.5Componentes en angularjs 1.5
Componentes en angularjs 1.5
 
Elementos de JSP
Elementos de JSPElementos de JSP
Elementos de JSP
 
ASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web apiASP.NET MVC - introduccion al web api
ASP.NET MVC - introduccion al web api
 
ASP.NET MVC - AJAX
ASP.NET MVC - AJAXASP.NET MVC - AJAX
ASP.NET MVC - AJAX
 
JSP
JSP JSP
JSP
 
Rails intro
Rails introRails intro
Rails intro
 
Ejercicio basico jsf’s
Ejercicio basico jsf’sEjercicio basico jsf’s
Ejercicio basico jsf’s
 
STRUTS (MVC e Java)
STRUTS (MVC e Java)STRUTS (MVC e Java)
STRUTS (MVC e Java)
 

En vedette

Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testingVisual Engineering
 
Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...
Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...
Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...Artyom Trityak
 
Workshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJSWorkshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJSVisual Engineering
 
Backgrid - A Backbone Plugin
Backgrid - A Backbone PluginBackgrid - A Backbone Plugin
Backgrid - A Backbone PluginNeerav Mittal
 
Workshop 13: AngularJS Parte II
Workshop 13: AngularJS Parte IIWorkshop 13: AngularJS Parte II
Workshop 13: AngularJS Parte IIVisual Engineering
 
Workshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIWorkshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIVisual Engineering
 
JavaScript: Past, Present, Future
JavaScript: Past, Present, FutureJavaScript: Past, Present, Future
JavaScript: Past, Present, FutureJungryul Choi
 
Workshop 9: BackboneJS y patrones MVC
Workshop 9: BackboneJS y patrones MVCWorkshop 9: BackboneJS y patrones MVC
Workshop 9: BackboneJS y patrones MVCVisual Engineering
 
Single page application and Framework
Single page application and FrameworkSingle page application and Framework
Single page application and FrameworkChandrasekar G
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
Refactoring to a Single Page Application
Refactoring to a Single Page ApplicationRefactoring to a Single Page Application
Refactoring to a Single Page ApplicationCodemotion
 
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)Ryuma Tsukano
 
Marionette: the Backbone framework
Marionette: the Backbone frameworkMarionette: the Backbone framework
Marionette: the Backbone frameworkfrontendne
 
Let’s talk about JavaScript - WebElement
Let’s talk about JavaScript - WebElementLet’s talk about JavaScript - WebElement
Let’s talk about JavaScript - WebElementMarian Rusnak
 
Workshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte IWorkshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte IVisual Engineering
 
Evolution of the Single Page Application
Evolution of the Single Page ApplicationEvolution of the Single Page Application
Evolution of the Single Page ApplicationCaleb Sotelo
 
Análisis de la variabilidad de la precipitación del mes de enero en los últim...
Análisis de la variabilidad de la precipitación del mes de enero en los últim...Análisis de la variabilidad de la precipitación del mes de enero en los últim...
Análisis de la variabilidad de la precipitación del mes de enero en los últim...Yan Arley Ramos Palacios
 

En vedette (19)

Workshop 10: ECMAScript 6
Workshop 10: ECMAScript 6Workshop 10: ECMAScript 6
Workshop 10: ECMAScript 6
 
Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testing
 
Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...
Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...
Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...
 
Workshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJSWorkshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJS
 
Backgrid - A Backbone Plugin
Backgrid - A Backbone PluginBackgrid - A Backbone Plugin
Backgrid - A Backbone Plugin
 
Workshop 13: AngularJS Parte II
Workshop 13: AngularJS Parte IIWorkshop 13: AngularJS Parte II
Workshop 13: AngularJS Parte II
 
Workshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIWorkshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte III
 
JavaScript: Past, Present, Future
JavaScript: Past, Present, FutureJavaScript: Past, Present, Future
JavaScript: Past, Present, Future
 
Workshop 15: Ionic framework
Workshop 15: Ionic frameworkWorkshop 15: Ionic framework
Workshop 15: Ionic framework
 
Workshop 9: BackboneJS y patrones MVC
Workshop 9: BackboneJS y patrones MVCWorkshop 9: BackboneJS y patrones MVC
Workshop 9: BackboneJS y patrones MVC
 
Single page application and Framework
Single page application and FrameworkSingle page application and Framework
Single page application and Framework
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Refactoring to a Single Page Application
Refactoring to a Single Page ApplicationRefactoring to a Single Page Application
Refactoring to a Single Page Application
 
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
 
Marionette: the Backbone framework
Marionette: the Backbone frameworkMarionette: the Backbone framework
Marionette: the Backbone framework
 
Let’s talk about JavaScript - WebElement
Let’s talk about JavaScript - WebElementLet’s talk about JavaScript - WebElement
Let’s talk about JavaScript - WebElement
 
Workshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte IWorkshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte I
 
Evolution of the Single Page Application
Evolution of the Single Page ApplicationEvolution of the Single Page Application
Evolution of the Single Page Application
 
Análisis de la variabilidad de la precipitación del mes de enero en los últim...
Análisis de la variabilidad de la precipitación del mes de enero en los últim...Análisis de la variabilidad de la precipitación del mes de enero en los últim...
Análisis de la variabilidad de la precipitación del mes de enero en los últim...
 

Similaire à Workshop 7: Single Page Applications

Presentación html5
Presentación html5Presentación html5
Presentación html5aydimdagam
 
Introducción a ASP.NET MVC
Introducción a ASP.NET MVCIntroducción a ASP.NET MVC
Introducción a ASP.NET MVCSebastián Rocco
 
Diseño en la web
Diseño en la webDiseño en la web
Diseño en la webMiguel Gea
 
Sesión 09: Desarrollo de Apps Web con Bsp en SAP
Sesión 09: Desarrollo de Apps Web con Bsp en SAPSesión 09: Desarrollo de Apps Web con Bsp en SAP
Sesión 09: Desarrollo de Apps Web con Bsp en SAPBiz Partner
 
SP2010 evolución vs evolución
SP2010 evolución vs evoluciónSP2010 evolución vs evolución
SP2010 evolución vs evolucióngoreorti
 
Kumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoKumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoDeivinson Tejeda
 
Introducción al desarrollo web moderno
Introducción al desarrollo web modernoIntroducción al desarrollo web moderno
Introducción al desarrollo web modernoSebastián Rocco
 
Web20
Web20Web20
Web20UJAP
 
Patrones Arquitecturales Para Aplicaciones Web
Patrones Arquitecturales Para Aplicaciones WebPatrones Arquitecturales Para Aplicaciones Web
Patrones Arquitecturales Para Aplicaciones Webguesta7f40
 
Exposicion topicos avanzados_chumpitaz
Exposicion topicos avanzados_chumpitazExposicion topicos avanzados_chumpitaz
Exposicion topicos avanzados_chumpitazCalzada Meza
 
Jc Web2.0 Java Ee5 Net Beans
Jc Web2.0 Java Ee5 Net BeansJc Web2.0 Java Ee5 Net Beans
Jc Web2.0 Java Ee5 Net Beansvicosw
 
RoadShow-Azure-PartnersMicrosoft-Nov-2010-Caso de éxito de Softeng Portal Bul...
RoadShow-Azure-PartnersMicrosoft-Nov-2010-Caso de éxito de Softeng Portal Bul...RoadShow-Azure-PartnersMicrosoft-Nov-2010-Caso de éxito de Softeng Portal Bul...
RoadShow-Azure-PartnersMicrosoft-Nov-2010-Caso de éxito de Softeng Portal Bul...SOFTENG
 
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptxSibilinoAndante
 

Similaire à Workshop 7: Single Page Applications (20)

ASP.NET MVC Workshop Día 1
ASP.NET MVC Workshop Día 1ASP.NET MVC Workshop Día 1
ASP.NET MVC Workshop Día 1
 
Presentación html5
Presentación html5Presentación html5
Presentación html5
 
Introducción a ASP.NET MVC
Introducción a ASP.NET MVCIntroducción a ASP.NET MVC
Introducción a ASP.NET MVC
 
Diseño en la web
Diseño en la webDiseño en la web
Diseño en la web
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3
 
Sesión 09: Desarrollo de Apps Web con Bsp en SAP
Sesión 09: Desarrollo de Apps Web con Bsp en SAPSesión 09: Desarrollo de Apps Web con Bsp en SAP
Sesión 09: Desarrollo de Apps Web con Bsp en SAP
 
Asp.net mvc
Asp.net mvcAsp.net mvc
Asp.net mvc
 
SP2010 evolución vs evolución
SP2010 evolución vs evoluciónSP2010 evolución vs evolución
SP2010 evolución vs evolución
 
Unitronics Analitica Web Wt
Unitronics Analitica Web WtUnitronics Analitica Web Wt
Unitronics Analitica Web Wt
 
Kumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoKumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y Futuro
 
Introducción al desarrollo web moderno
Introducción al desarrollo web modernoIntroducción al desarrollo web moderno
Introducción al desarrollo web moderno
 
Web20
Web20Web20
Web20
 
Patrones Arquitecturales Para Aplicaciones Web
Patrones Arquitecturales Para Aplicaciones WebPatrones Arquitecturales Para Aplicaciones Web
Patrones Arquitecturales Para Aplicaciones Web
 
Web app
Web appWeb app
Web app
 
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
 
Exposicion topicos avanzados_chumpitaz
Exposicion topicos avanzados_chumpitazExposicion topicos avanzados_chumpitaz
Exposicion topicos avanzados_chumpitaz
 
Jc Web2.0 Java Ee5 Net Beans
Jc Web2.0 Java Ee5 Net BeansJc Web2.0 Java Ee5 Net Beans
Jc Web2.0 Java Ee5 Net Beans
 
RoadShow-Azure-PartnersMicrosoft-Nov-2010-Caso de éxito de Softeng Portal Bul...
RoadShow-Azure-PartnersMicrosoft-Nov-2010-Caso de éxito de Softeng Portal Bul...RoadShow-Azure-PartnersMicrosoft-Nov-2010-Caso de éxito de Softeng Portal Bul...
RoadShow-Azure-PartnersMicrosoft-Nov-2010-Caso de éxito de Softeng Portal Bul...
 
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
 

Plus de Visual Engineering

Workshop 27: Isomorphic web apps with ReactJS
Workshop 27: Isomorphic web apps with ReactJSWorkshop 27: Isomorphic web apps with ReactJS
Workshop 27: Isomorphic web apps with ReactJSVisual Engineering
 
Workshop iOS 4: Closures, generics & operators
Workshop iOS 4: Closures, generics & operatorsWorkshop iOS 4: Closures, generics & operators
Workshop iOS 4: Closures, generics & operatorsVisual Engineering
 
Workshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensionesWorkshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensionesVisual Engineering
 
Workshop iOS 2: Swift - Structures
Workshop iOS 2: Swift - StructuresWorkshop iOS 2: Swift - Structures
Workshop iOS 2: Swift - StructuresVisual Engineering
 
Workhop iOS 1: Fundamentos de Swift
Workhop iOS 1: Fundamentos de SwiftWorkhop iOS 1: Fundamentos de Swift
Workhop iOS 1: Fundamentos de SwiftVisual Engineering
 
Workshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideVisual Engineering
 
Workshop 25: React Native - Components
Workshop 25: React Native - ComponentsWorkshop 25: React Native - Components
Workshop 25: React Native - ComponentsVisual Engineering
 
Workshop 24: React Native Introduction
Workshop 24: React Native IntroductionWorkshop 24: React Native Introduction
Workshop 24: React Native IntroductionVisual Engineering
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingWorkshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingVisual Engineering
 
Workshop 22: ReactJS Redux Advanced
Workshop 22: ReactJS Redux AdvancedWorkshop 22: ReactJS Redux Advanced
Workshop 22: ReactJS Redux AdvancedVisual Engineering
 
Workshop 22: React-Redux Middleware
Workshop 22: React-Redux MiddlewareWorkshop 22: React-Redux Middleware
Workshop 22: React-Redux MiddlewareVisual Engineering
 
Workshop 20: ReactJS Part II Flux Pattern & Redux
Workshop 20: ReactJS Part II Flux Pattern & ReduxWorkshop 20: ReactJS Part II Flux Pattern & Redux
Workshop 20: ReactJS Part II Flux Pattern & ReduxVisual Engineering
 
Workshop 19: ReactJS Introduction
Workshop 19: ReactJS IntroductionWorkshop 19: ReactJS Introduction
Workshop 19: ReactJS IntroductionVisual Engineering
 
Workshop 18: CSS Animations & cool effects
Workshop 18: CSS Animations & cool effectsWorkshop 18: CSS Animations & cool effects
Workshop 18: CSS Animations & cool effectsVisual Engineering
 
Workshop 11: Trendy web designs & prototyping
Workshop 11: Trendy web designs & prototypingWorkshop 11: Trendy web designs & prototyping
Workshop 11: Trendy web designs & prototypingVisual Engineering
 
Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Visual Engineering
 

Plus de Visual Engineering (20)

Workshop 27: Isomorphic web apps with ReactJS
Workshop 27: Isomorphic web apps with ReactJSWorkshop 27: Isomorphic web apps with ReactJS
Workshop 27: Isomorphic web apps with ReactJS
 
Workshop iOS 4: Closures, generics & operators
Workshop iOS 4: Closures, generics & operatorsWorkshop iOS 4: Closures, generics & operators
Workshop iOS 4: Closures, generics & operators
 
Workshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensionesWorkshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensiones
 
Workshop iOS 2: Swift - Structures
Workshop iOS 2: Swift - StructuresWorkshop iOS 2: Swift - Structures
Workshop iOS 2: Swift - Structures
 
Workhop iOS 1: Fundamentos de Swift
Workhop iOS 1: Fundamentos de SwiftWorkhop iOS 1: Fundamentos de Swift
Workhop iOS 1: Fundamentos de Swift
 
Workshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native Side
 
Workshop 25: React Native - Components
Workshop 25: React Native - ComponentsWorkshop 25: React Native - Components
Workshop 25: React Native - Components
 
Workshop 24: React Native Introduction
Workshop 24: React Native IntroductionWorkshop 24: React Native Introduction
Workshop 24: React Native Introduction
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingWorkshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testing
 
Workshop 22: ReactJS Redux Advanced
Workshop 22: ReactJS Redux AdvancedWorkshop 22: ReactJS Redux Advanced
Workshop 22: ReactJS Redux Advanced
 
Workshop 22: React-Redux Middleware
Workshop 22: React-Redux MiddlewareWorkshop 22: React-Redux Middleware
Workshop 22: React-Redux Middleware
 
Workshop 21: React Router
Workshop 21: React RouterWorkshop 21: React Router
Workshop 21: React Router
 
Workshop 20: ReactJS Part II Flux Pattern & Redux
Workshop 20: ReactJS Part II Flux Pattern & ReduxWorkshop 20: ReactJS Part II Flux Pattern & Redux
Workshop 20: ReactJS Part II Flux Pattern & Redux
 
Workshop 19: ReactJS Introduction
Workshop 19: ReactJS IntroductionWorkshop 19: ReactJS Introduction
Workshop 19: ReactJS Introduction
 
Workshop 18: CSS Animations & cool effects
Workshop 18: CSS Animations & cool effectsWorkshop 18: CSS Animations & cool effects
Workshop 18: CSS Animations & cool effects
 
Workshop 17: EmberJS parte II
Workshop 17: EmberJS parte IIWorkshop 17: EmberJS parte II
Workshop 17: EmberJS parte II
 
Workshop 16: EmberJS Parte I
Workshop 16: EmberJS Parte IWorkshop 16: EmberJS Parte I
Workshop 16: EmberJS Parte I
 
Workshop 11: Trendy web designs & prototyping
Workshop 11: Trendy web designs & prototypingWorkshop 11: Trendy web designs & prototyping
Workshop 11: Trendy web designs & prototyping
 
Workshop 6: Designer tools
Workshop 6: Designer toolsWorkshop 6: Designer tools
Workshop 6: Designer tools
 
Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.
 

Workshop 7: Single Page Applications

  • 2. ¿Por qué necesitamos las SPA si ya teníamos nuestro sitio web bien diseñado con una navegación clara e indexable por los buscadores?
  • 3. ¿Por qué? - Desacoplar la lógica de servidor y todas las operaciones de Back-end de las que son puramente informacionales o de presentación (Front-end) - Permite centrarnos en la usabilidad de la aplicación y así mejorar la experiencia de usuario - Nos permite aplicar mejores patrones de diseño tanto en Front-end como en Back-end - Son más rápidas por el hecho que la información transmitida en ambos canales es menor y además expone varias técnicas de optimización. - Son más fáciles de mantener y testear
  • 4. ¿Cuáles son las bases para construir una SPA?
  • 6. Bloques SPA - Server Façade - Servidor que provea los recursos estáticos: - Vistas - Templates - Página Inicial - Estilos - Lógica (JS) - Repositorio de Datos - Modelos - Operaciones REST - Modelos - Controladores - Acciones - Gestión Sesión - Autentificación
  • 7. Bloques SPA - Cliente - Sistema de navegación - ROUTER - Gestión del History - Hashtags - Navegación HTML5 - Bookmarking - Gestión Templates - Obtención del Server Façade - Gestión de los controladores asociados - Patrón de diseño: - MVC / MVP - MVVM - Gestión Utilidades: - Traducciones - Acceso LocalStorage - Cookies - Data Layer - Network Layer
  • 9. AJAX Tips - Utilizar JSON como formato de los datos de transporte - Content-Type: application/json - Accept: application/json - Headers extra para autentificación - Cuidado con HTTPS desde HTTP - No va a ser posible por considerarse un CrossDomain request. Utilizamos iFrame auxiliar cargado por HTTPS y la aplicación se comunica con este iFrame por postMessage. Es el iFrame el que realizará las comunicaciones AJAX. - Cuidado con CORS: Cross Origin Resource Sharing - Respuestas comprimidas en GZIP.
  • 11. Model - View- Controller Model View Controller Render UI Actions What to Do Update
  • 12. Model - View - Presenter Model ViewPresenter Update setData() UI Events Render View Update View Data Service Layer
  • 13. Model - View - ViewModel Model View ViewModel ViewModel State UI Actions What to Do Update Render Retrieve Data Model Subset 2-Way Data Binding
  • 14. SPA Routing: Características y aproximación con PageJS
  • 15. SPA - Routing - Deben gestionar el binomio URL - Vista - Diccionario URL - Vista - Controlador - Uso de api HTML5 de History o Downgrade a Hashbangs - Concepto de Estado de una URL-Vista - Navegación atrás: onPopState - Navegación hace delante: pushState - Navegación sintética: - Renderización de Vistas - Activación de lógica de cliente para cada vista - Gestión de estilos - Gestión propia de la aplicación
  • 16. PageJS - page({options}) → Configura el sistema de navegación - page(url, callback) → Añade entrada al diccionario url- acción - page(url) → Navegación hacia la url - page.start() → Inicia el sistema de navegación - page.stop() → Detiene el sistema de navegación. No pierde las entradas url-acción del diccionario - Las rutas deben definirse en un único punto y deben de ser únicas - La url puede contener expresiones regulares, conteniendo parámetros que se pueden pasar a la callback. Ejemplo: route: 'premium/pedido/:orderId'
  • 17. Las SPA no tienen nada en contra???
  • 18. No es oro todo lo que reluce... - Alta complejidad técnica: - Sistema de routing adaptado a las necesidades de la aplicación - Uso de analytics más complejo por la navegación sintética - Los diseñadores no están preparados técnicamente y deben trabajar sobre maquetas que después son integradas por los desarrolladores - No amigable para los robots y spiders de los buscadores - JS sin memory leaks porque sino… - Falta de sincronismo con el servidor en navegación tradicional - Primera carga en blanco + Loading… - El navegador debe tener JS activado
  • 19.
  • 20. Navegador sin JS activado NO HAY MÁS LLAMADAS ….
  • 22. Arquitectura que funciona (I) - El Servidor Façade debe proporcionarnos las páginas como si fuera navegación tradicional: - customRender: Método que tiene en cuenta si estamos navegando por AJAX o es un refresco. - Incluye la VISTA + DataLayer - El cliente se “engancha” a la vista + datos cuando refrescamos - Evita la página en blanco + Loading... - El cliente se divide en controladores de página o grandes secciones de una página y todos los elementos con interacción se controlan como widgets los cuales son orquestrados por el controlador principal - El router solicita páginas al servidor y parsea en busca de controladores de página para activarlos pasándole el DataLayer
  • 23. Arquitectura que funciona (II) PAGE REFRESH SERVER FAÇADE Obtain Data Render Template with Data Flush Both Presentation Layer HTML Data Layer JSON CUSTOM RENDER - NON XHR REQUEST CLIENT CONTROLLERS MANAGER PARSE VIEW SYNC DATA START CONTROLLERS ROUTING ENGINE START ENGINE
  • 24. Arquitectura que funciona (III) CLIENT SIDE NAVIGATION SERVER FAÇADE Obtain Data Obtain Compiled Template Flush Both Presentation Layer JS Data Layer JSON CUSTOM RENDER - XHR REQUEST CLIENT CONTROLLERS MANAGER PARSE VIEW SYNC DATA START CONTROLLERS ROUTING ENGINE REQUEST PAGE RENDER VIEW CONTR. MANAGER
  • 25. THANKS FOR YOUR ATTENTION! Give your questions on the comments section