SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
Single	Page
Applications
Diego	Cardozo
github.com/diegocard/SPA-Presentation
Temas
1.	 Motivación
2.	 Introducción
3.	 Ejemplos
4.	 Arquitectura
5.	 Ventajas	y	desventajas
6.	 Herramientas
7.	 Demo
Motivación	(1)
Uno	de	los	factores	principales	para	la	experiencia
de	usuario	es	el	tiempo	de	carga.
Para	mejorarlo,	conocemos	varias	técnicas:
Minimizar	scripts	y	CSS
Combinar	imágenes	en	un	único	sprite
Retardar	la	ejecución	de	JavaScript
Manejo	especial	de	archivos	estáticos	(CDN)
Caché	de	recursos
Motivación	(2)
Sin	embargo,	aún	con	caché	el	browser	debe:
Volver	a	parsear	y	ejecutar	el	código	CSS	y	JavaScript.
Descargar	y	parsear	todo	el	código	HTML.
Aún	cuando	sólo	haya	cambiado	un	pequeña	parte.
Reconstruir	el	árbol	DOM.
Renderizar	la	interfaz.
El	usuario	ve	como	la	página	se	construye	mientras	espera.
Motivación	(3)
En	resumen,	SPA	surge	como	una	respuesta	a	las	preguntas:
¿Como	podemos	lograr	un	manejo	mas	eficiente?
¿Podemos	cargar	solamente	lo	nuevo	o	necesario?
¿Como	podemos	mejorar	la	experiencia	del	usuario?
Introducción	(1)
¿Que	es	una	SPA?
Es	un	nuevo	enfoque	para	construir	aplicaciones	web.
Todo	el	código	se	carga	en	la	primera	llamada	o
posteriormente	de	forma	dinámica,	sin	recargar	la	página.
La	navegación	se	resuelve	en	el	cliente.
Las	llamadas	al	servidor	se	hacen	de	forma	asincrónica.
La	interfaz	se	construye	en	el	cliente.
Introducción	(2)
Que	NO	es	una	SPA
Unir	todas	las	páginas	del	sitio	en	una	sola	y	cargarla
estáticamente.
Blanco	o	negro,	existen	enfoques	híbridos.
Una	bala	de	plata:	puede	no	servir	para	todos	los	casos	o
proyectos.
Introducción	(3)
¿Que	puede	hacer	una	SPA?
Cambios	de	URL	y	navegación	hacia	atrás	y	adelante.
Manipulación	de	DOM	del	lado	del	cliente.
Esperar	a	que	la	vista	se	cargue	antes	de	mostrarla.
Almacenar	páginas	ya	cargadas	en	el	cliente.
Ejemplos
GMail
Esta	presentación
Stashy
Nogginator
Arquitectura
Ventajas	y	desventajas	(1)
Ventajas
Interfaz	mas	rápida.
Mantenimiento	más	sencillo.
Distribución	de	carga.
Comienzo	del	desarrollo	más	ágil.
La	interfaz	es	simplemente	otro	cliente.
Se	presta	muy	bien	para	testing.
Perfecto	para	combinar	con	aplicaciones	móviles.
Ventajas	y	desventajas	(2)
Desventajas
La	primera	carga	puede	ser	lenta.
SEO	se	vuelve	complejo.
Require	JavaScript	habilitado.
Requiere	conocimiento	adicional	de	JavaScript.
Rompe	con	las	convenciones	de	analytics,	ads	y	widgets.
Ventajas	y	desventajas	(3)
Otros	aspectos
Trasladamos	la	lógica	de	negocio	no	crítica	al	cliente.
Antes	nuestro	código	era	90%	C#/VB	y	10%	JS.
Ahora	para	a	ser	a	50	y	50.
No	es	una	ventaja	o	desventaja,	pero	vamos	a	precisar	un
juego	distinto	de	herramientas	para	mantener	buenas
prácticas.
Herramientas	(1)
Desarrollo	del	cliente
Herramientas	(2)
Knockout.js
Knockout	creado	por	Steve	Anderson
PM	de	ASP.NET	en	Microsoft.
Utiliza	MVVM,	patrón	de	diseño	creado	por	John	Smith
MVP	en	Microsoft	por	su	trabajo	en	WPF.
Se	puede	utilizar	aún	cuando	no	desarrollamos	SPA.
Incluído	por	defecto	junto	con	los	templates	de	MVC4.
Herramientas	(3)
Desarrollo	del	servidor
En	MVC,	nuestros	controladores	pasan	a	ser	ApiControllers
para	definir	un	API	RESTful.
Implementamos	una	sola	vista	(layout).
No	vamos	a	utilizar	Razor	para	renderizar	las	vistas.
Vamos	a	ver	un	template	para	Visual	Studio	que	trae	un
proyecto	pre-configurado	para	SPA	(Hot	Towel	SPA).
Demo	(1)
Partimos	del	template	Hot	Towel	SPA	de	John	Papa
Vamos	a	ver	los	principales	componenetes	de	Durandal
Ver	cada	componente	a	fondo	llevaría	demasiado.
En	el	servidor	recorremos	el	API	RESTful	
Expone	los	datos	de	los	usuarios.
Agregamos	una	funcionalidad	(sesiones).
Recorremos	el	código	del	cliente.
Analizamos	las	librerías	mas	importantes.
Demogithub.com/diegocard/SPA-Demo
Recursos
learn.knockout.com
singlepageappbook.com
todomvc.com
johnpapa.net
slideshare.net/dcslides/spa-25806613
Para	saber	más
¿Preguntas?

Más contenido relacionado

La actualidad más candente

Presentación sobre Diseño Web
Presentación sobre Diseño WebPresentación sobre Diseño Web
Presentación sobre Diseño WebMarcelo Freitas
 
Manual de seguridad informática
Manual de seguridad informáticaManual de seguridad informática
Manual de seguridad informáticaCristhian Mendoza
 
DIRECCIONES Y CLASES IP
DIRECCIONES Y CLASES IPDIRECCIONES Y CLASES IP
DIRECCIONES Y CLASES IPDiego Villacis
 
Arquitectura Rest
Arquitectura RestArquitectura Rest
Arquitectura RestIsrael Rey
 
Seguridad física de una red de área local
Seguridad física de una red de área localSeguridad física de una red de área local
Seguridad física de una red de área localLuan Divad Seyer
 
Arquitectura de aplicaciones distribuidas
Arquitectura de aplicaciones distribuidasArquitectura de aplicaciones distribuidas
Arquitectura de aplicaciones distribuidasRosario Dguez
 
Arquitectura 3 Capas
Arquitectura 3 CapasArquitectura 3 Capas
Arquitectura 3 CapasFani Calle
 
Funciones del sistema operativo
Funciones del sistema operativoFunciones del sistema operativo
Funciones del sistema operativoHugo
 
Modelos de API Para El Diseño de Servicios
Modelos de API Para El Diseño de ServiciosModelos de API Para El Diseño de Servicios
Modelos de API Para El Diseño de ServiciosJavier Vélez Reyes
 
Diapositivas de wordpress
Diapositivas de wordpressDiapositivas de wordpress
Diapositivas de wordpressjhoanaalfredito
 
Taller No. 1 Introducción a Bases de Datos..pdf
Taller No. 1 Introducción a Bases de Datos..pdfTaller No. 1 Introducción a Bases de Datos..pdf
Taller No. 1 Introducción a Bases de Datos..pdfLIZETHHASLEIDYPOLOCH
 
Que es CSS? Presentacion Basica para CSS
Que es CSS? Presentacion Basica para CSSQue es CSS? Presentacion Basica para CSS
Que es CSS? Presentacion Basica para CSSjosuew2013
 

La actualidad más candente (20)

Presentación sobre Diseño Web
Presentación sobre Diseño WebPresentación sobre Diseño Web
Presentación sobre Diseño Web
 
Manual de seguridad informática
Manual de seguridad informáticaManual de seguridad informática
Manual de seguridad informática
 
DIRECCIONES Y CLASES IP
DIRECCIONES Y CLASES IPDIRECCIONES Y CLASES IP
DIRECCIONES Y CLASES IP
 
Arquitectura Rest
Arquitectura RestArquitectura Rest
Arquitectura Rest
 
Seguridad física de una red de área local
Seguridad física de una red de área localSeguridad física de una red de área local
Seguridad física de una red de área local
 
Javascript
JavascriptJavascript
Javascript
 
Arquitectura de aplicaciones distribuidas
Arquitectura de aplicaciones distribuidasArquitectura de aplicaciones distribuidas
Arquitectura de aplicaciones distribuidas
 
Arquitectura 3 Capas
Arquitectura 3 CapasArquitectura 3 Capas
Arquitectura 3 Capas
 
Html (ppt)
Html (ppt)Html (ppt)
Html (ppt)
 
Procesador
ProcesadorProcesador
Procesador
 
Python
PythonPython
Python
 
Tarjeta madre
Tarjeta madreTarjeta madre
Tarjeta madre
 
PRESENTACIÓN RUP
PRESENTACIÓN RUPPRESENTACIÓN RUP
PRESENTACIÓN RUP
 
Direcciones URL
Direcciones URLDirecciones URL
Direcciones URL
 
Funciones del sistema operativo
Funciones del sistema operativoFunciones del sistema operativo
Funciones del sistema operativo
 
Modelos de API Para El Diseño de Servicios
Modelos de API Para El Diseño de ServiciosModelos de API Para El Diseño de Servicios
Modelos de API Para El Diseño de Servicios
 
Diapositivas de wordpress
Diapositivas de wordpressDiapositivas de wordpress
Diapositivas de wordpress
 
Lenguaje html y css
Lenguaje html y cssLenguaje html y css
Lenguaje html y css
 
Taller No. 1 Introducción a Bases de Datos..pdf
Taller No. 1 Introducción a Bases de Datos..pdfTaller No. 1 Introducción a Bases de Datos..pdf
Taller No. 1 Introducción a Bases de Datos..pdf
 
Que es CSS? Presentacion Basica para CSS
Que es CSS? Presentacion Basica para CSSQue es CSS? Presentacion Basica para CSS
Que es CSS? Presentacion Basica para CSS
 

Similar a Single Page Applications

Optimizar performance sin morir en el intento
Optimizar performance sin morir en el intentoOptimizar performance sin morir en el intento
Optimizar performance sin morir en el intentoDiego Cardozo
 
Puntos clave para optimizar Wordpress by Raiola Networks
Puntos clave para optimizar Wordpress by Raiola NetworksPuntos clave para optimizar Wordpress by Raiola Networks
Puntos clave para optimizar Wordpress by Raiola NetworksRaiola Networks
 
Code camp 2011 - Creando aplicaciones a la velocidad de la luz
Code camp 2011 - Creando aplicaciones a la velocidad de la luzCode camp 2011 - Creando aplicaciones a la velocidad de la luz
Code camp 2011 - Creando aplicaciones a la velocidad de la luzDiego Ferreyra
 
High performance Web Sites
High performance Web SitesHigh performance Web Sites
High performance Web SitesopenfinanceDev
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !ouuyeah
 
Proyectos escalables con Drupal
Proyectos escalables con DrupalProyectos escalables con Drupal
Proyectos escalables con DrupalPablo Cerda
 
Programacion Basica
Programacion Basica Programacion Basica
Programacion Basica Yoconditap
 
Presentación de programacion
Presentación  de programacionPresentación  de programacion
Presentación de programacionlajokito
 
UDA-Desarrollo RUP. Consejos y buenas prácticas
UDA-Desarrollo RUP. Consejos y buenas prácticasUDA-Desarrollo RUP. Consejos y buenas prácticas
UDA-Desarrollo RUP. Consejos y buenas prácticasAnder Martinez
 
Instalacion adobe dream weaver
Instalacion adobe dream weaverInstalacion adobe dream weaver
Instalacion adobe dream weaverLuis Viteri
 
Rendimiento Java Script - Programador PHP
Rendimiento  Java Script - Programador PHPRendimiento  Java Script - Programador PHP
Rendimiento Java Script - Programador PHPJuan Belón Pérez
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web DesignJuan Morales
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 

Similar a Single Page Applications (20)

Optimizar performance sin morir en el intento
Optimizar performance sin morir en el intentoOptimizar performance sin morir en el intento
Optimizar performance sin morir en el intento
 
Puntos clave para optimizar Wordpress by Raiola Networks
Puntos clave para optimizar Wordpress by Raiola NetworksPuntos clave para optimizar Wordpress by Raiola Networks
Puntos clave para optimizar Wordpress by Raiola Networks
 
Code camp 2011 - Creando aplicaciones a la velocidad de la luz
Code camp 2011 - Creando aplicaciones a la velocidad de la luzCode camp 2011 - Creando aplicaciones a la velocidad de la luz
Code camp 2011 - Creando aplicaciones a la velocidad de la luz
 
5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web
 
Performance en Drupal 7
Performance en Drupal 7Performance en Drupal 7
Performance en Drupal 7
 
High performance Web Sites
High performance Web SitesHigh performance Web Sites
High performance Web Sites
 
Plataformas cliente servidor
Plataformas cliente servidorPlataformas cliente servidor
Plataformas cliente servidor
 
Renderizando la web del 2020
Renderizando la web del 2020Renderizando la web del 2020
Renderizando la web del 2020
 
Aprendiendo GWT
Aprendiendo GWTAprendiendo GWT
Aprendiendo GWT
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !
 
Proyectos escalables con Drupal
Proyectos escalables con DrupalProyectos escalables con Drupal
Proyectos escalables con Drupal
 
Programacion Basica
Programacion Basica Programacion Basica
Programacion Basica
 
Presentación de programacion
Presentación  de programacionPresentación  de programacion
Presentación de programacion
 
Tema 6
Tema 6Tema 6
Tema 6
 
UDA-Desarrollo RUP. Consejos y buenas prácticas
UDA-Desarrollo RUP. Consejos y buenas prácticasUDA-Desarrollo RUP. Consejos y buenas prácticas
UDA-Desarrollo RUP. Consejos y buenas prácticas
 
Instalacion adobe dream weaver
Instalacion adobe dream weaverInstalacion adobe dream weaver
Instalacion adobe dream weaver
 
Rendimiento Java Script - Programador PHP
Rendimiento  Java Script - Programador PHPRendimiento  Java Script - Programador PHP
Rendimiento Java Script - Programador PHP
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Semana 4 SPA vs MPA
Semana 4  SPA vs MPASemana 4  SPA vs MPA
Semana 4 SPA vs MPA
 

Más de Diego Cardozo

El proximo billon de usuarios
El proximo billon de usuariosEl proximo billon de usuarios
El proximo billon de usuariosDiego Cardozo
 
The next billion users
The next billion usersThe next billion users
The next billion usersDiego Cardozo
 
Troubleshooting Ecommerce Performance
 Troubleshooting Ecommerce Performance Troubleshooting Ecommerce Performance
Troubleshooting Ecommerce PerformanceDiego Cardozo
 
Cranking It Up - SuiteWorld 2017
Cranking It Up  - SuiteWorld 2017Cranking It Up  - SuiteWorld 2017
Cranking It Up - SuiteWorld 2017Diego Cardozo
 
Speed Thrills - Suiteworld 2016
Speed Thrills - Suiteworld 2016Speed Thrills - Suiteworld 2016
Speed Thrills - Suiteworld 2016Diego Cardozo
 
Performance in the cloud
Performance in the cloudPerformance in the cloud
Performance in the cloudDiego Cardozo
 
Cómo testear performance sin morir en el intento
Cómo testear performance sin morir en el intentoCómo testear performance sin morir en el intento
Cómo testear performance sin morir en el intentoDiego Cardozo
 
Optimize performance and not die trying
Optimize performance and not die tryingOptimize performance and not die trying
Optimize performance and not die tryingDiego Cardozo
 
How to test performance and not die trying
How to test performance and not die tryingHow to test performance and not die trying
How to test performance and not die tryingDiego Cardozo
 
Testeando performance sin morir en el intento
Testeando performance sin morir en el intentoTesteando performance sin morir en el intento
Testeando performance sin morir en el intentoDiego Cardozo
 
Organización de aplicaciones web con Backbone.js
Organización de aplicaciones web con Backbone.jsOrganización de aplicaciones web con Backbone.js
Organización de aplicaciones web con Backbone.jsDiego Cardozo
 
Structuring web applications with Backbone.js
Structuring web applications with Backbone.jsStructuring web applications with Backbone.js
Structuring web applications with Backbone.jsDiego Cardozo
 
Component Based Software Development
Component Based Software DevelopmentComponent Based Software Development
Component Based Software DevelopmentDiego Cardozo
 
Desarrollo de Software Basado en Componentes
Desarrollo de Software Basado en ComponentesDesarrollo de Software Basado en Componentes
Desarrollo de Software Basado en ComponentesDiego Cardozo
 
Single page applications
Single page applicationsSingle page applications
Single page applicationsDiego Cardozo
 

Más de Diego Cardozo (15)

El proximo billon de usuarios
El proximo billon de usuariosEl proximo billon de usuarios
El proximo billon de usuarios
 
The next billion users
The next billion usersThe next billion users
The next billion users
 
Troubleshooting Ecommerce Performance
 Troubleshooting Ecommerce Performance Troubleshooting Ecommerce Performance
Troubleshooting Ecommerce Performance
 
Cranking It Up - SuiteWorld 2017
Cranking It Up  - SuiteWorld 2017Cranking It Up  - SuiteWorld 2017
Cranking It Up - SuiteWorld 2017
 
Speed Thrills - Suiteworld 2016
Speed Thrills - Suiteworld 2016Speed Thrills - Suiteworld 2016
Speed Thrills - Suiteworld 2016
 
Performance in the cloud
Performance in the cloudPerformance in the cloud
Performance in the cloud
 
Cómo testear performance sin morir en el intento
Cómo testear performance sin morir en el intentoCómo testear performance sin morir en el intento
Cómo testear performance sin morir en el intento
 
Optimize performance and not die trying
Optimize performance and not die tryingOptimize performance and not die trying
Optimize performance and not die trying
 
How to test performance and not die trying
How to test performance and not die tryingHow to test performance and not die trying
How to test performance and not die trying
 
Testeando performance sin morir en el intento
Testeando performance sin morir en el intentoTesteando performance sin morir en el intento
Testeando performance sin morir en el intento
 
Organización de aplicaciones web con Backbone.js
Organización de aplicaciones web con Backbone.jsOrganización de aplicaciones web con Backbone.js
Organización de aplicaciones web con Backbone.js
 
Structuring web applications with Backbone.js
Structuring web applications with Backbone.jsStructuring web applications with Backbone.js
Structuring web applications with Backbone.js
 
Component Based Software Development
Component Based Software DevelopmentComponent Based Software Development
Component Based Software Development
 
Desarrollo de Software Basado en Componentes
Desarrollo de Software Basado en ComponentesDesarrollo de Software Basado en Componentes
Desarrollo de Software Basado en Componentes
 
Single page applications
Single page applicationsSingle page applications
Single page applications
 

Single Page Applications