una spa single que programacion porque pagina page hacer ejemplos ejemplo con como application aplicaciones angularjs seo ember.js progressive-enhancement graceful-degradation

spa - Aplicación web híbrida basada en página/de una sola página(Angularjs, Ember.js) con mejora progresiva?



que es un spa programacion (2)

Me pregunto si alguien ha encontrado una solución a este problema. ¿Hay alguna manera de obtener lo mejor de ambos mundos?

  • construya un sitio basado en páginas, con enlaces permanentes, accesibilidad, SEO, y elegante mejora / mejora progresiva (básicamente todas las mejores prácticas de desarrollo web )
  • y, para aquellos con javascript, una experiencia de usuario receptiva con carga de contenido ajax, ninguna página se actualiza mientras se navega por las páginas del sitio subyacente, descarga redundante mínima de scripts / content / css / etc. (todos los beneficios de un marco del lado del cliente como AngularJs o Ember.js)

Veo que algunos sitios importantes son capaces de administrar esto (gmail, stackoverflow), y veo que el nuevo sitio de Jeff crea una versión escueta del sitio en una etiqueta noscript.

  1. ¿La solución para la aplicación híbrida basada en página / de una sola página consiste en crear dos versiones del sitio, enviar ambas y dejar que el cliente decida qué puede mostrar? (¿Esto es lo que hace Gmail?)
  2. O es el problema que AngularJS et al. simplemente no están diseñados para permitir una degradación elegante?

Me duele el cerebro DRY pensar que el # 1 es la respuesta.

(La razón por la que me estoy enfocando en AngularJs es que me gusta su soporte para plantillas HTML, estilo declarativo y sus intentos de corregir el alcance js. Ember y otros marcos son excelentes también, tal vez uno de ellos sería mejor para un sitio híbrido ?)



Esta pregunta es un poco matizada porque la respuesta es "depende". Por ejemplo, mencionaste Gmail, no hay ninguna razón para que una aplicación como Gmail deba indexarse ​​para SEO, aunque dependiendo de lo que quieras o necesites apoyar, es posible que quieras asegurarte de que puedas admitir que no tienes Javascript.

Sin embargo, incluso el argumento "no-javascript" se está cansando y está débil en estos días, al menos para la clase de "aplicaciones web". Si quiero usar una aplicación de Windows, necesito Windows, si quiero usar una aplicación web con Javascript no es irrazonable suponer que voy a necesitar un navegador que no esté paralizado para usarlo.

Sin embargo, de vuelta a su pregunta, solo puedo hablar con AngularJS porque estoy más familiarizado con él. En su mayor parte, le permite admitir un enfoque de mejora progresiva, aunque no espere utilizar cosas como el enrutamiento de URL si esto es lo que desea admitir. Lo que puede hacer es usar controladores AngularJS, enlaces y directivas similares a como podría usar jQuery como una forma de mejorar las interacciones y los comportamientos de la página.

Solo tenga en cuenta que este enfoque limitará seriamente lo que puede hacer con Angular (o Ember para ese asunto) y puede comenzar a ser discutible lo que está obteniendo de este enfoque que no podría hacer fácilmente con jQuery solo.

La alternativa en estos días es hacer lo que hacen los sitios como Twitter. Eso es básicamente servir HTML totalmente procesado desde el servidor para cualquier vista en la carga inicial y luego usar Javascript para la posterior carga y el comportamiento mejorado de la interfaz de usuario. Esto es muy efectivo (aunque tal vez sea bastante difícil de implementar) si realmente necesita admitir la navegación con y sin Javascript y tiene el beneficio adicional de mejorar los tiempos de procesamiento / carga para la primera solicitud. Nuevamente, "depende" porque depende mucho de cómo funciona realmente su sitio si es posible usarlo. Tienes que diseñar para ello, y no va a ser trivial o fácil.

Actualizar:

Por lo que vale, estamos tomando el enfoque de Year of Moo y renderizando las páginas que necesitan SEO usando PhantomJS y pegando el estado inicial en caché de ellas en algún lugar para servirlas. Tenemos una tarea de rake que ejecutamos en implementaciones para actualizar esto. De nuevo, este es solo el estado inicial, pero ayuda a resolver el problema por el momento.

Sin embargo, las cosas siempre están cambiando y estoy seguro de que habré cambiado de opinión sobre este enfoque en un año más o menos.