Estoy llegando al punto en una aplicación donde tengo que empezar las cosas de almacenamiento en caché, y eso me hizo pensar ...¿Por qué no acabo de construir toda la aplicación web en plantillas HTML de Javascript y Javascript?
- En algunas partes de la aplicación, que rinden filas de la tabla (jqGrid, slickgrid, etc.) o filas div sofisticadas (como en el Nuevo Twitter) agarrando JSON puro y ejecutándolo a través de algo como Moustache, jquery.tmpl, etc.
- En otras partes de la aplicación, simplemente renderizo la información en HTML puro (Plantillas HAML del lado del servidor), y si hay búsqueda/paginación, simplemente voy a una nueva URL y cargo una nueva página HTML.
Ahora el problema está en el almacenamiento en caché y la mantenibilidad.
Por un lado, estoy pensando, si todo se construyera usando Plantillas HTML de JavaScript, entonces mi aplicación solo serviría un diseño/shell HTML, y un montón de JSON. Si miras la fuente HTML de Facebook y Twitter, eso es básicamente lo que están haciendo (95% json/javascript, 5% html). Esto lo haría para que mi aplicación solo necesite almacenar en caché JSON (páginas, acciones y/o registros). Lo que significa que presionarías el caché sin importar si eras un desarrollador de API remota que accedía a una api de JSON o a la aplicación web de estrecho. Es decir, no necesito 2 cachés, uno para JSON y otro para HTML. Parece que eso reduciría mi almacén de caché a la mitad, y racionalizaría las cosas un poco.
Por otro lado, estoy pensando, por lo que he visto/experimentado, generar HTML estático en el servidor, y almacenarlo en caché, parece ser mucho mejor en cuanto a rendimiento, navegador cruzado; obtienes los gráficos instantáneamente y no tienes que esperar esa fracción de segundo para que javascript los renderice. StackOverflow parece hacer todo en HTML simple, también lo hace Google, y se puede decir ... todo aparece a la vez. Observe cómo sin embargo en twitter.com, la página está en blanco durante .5-1 segundos, y la página se divide en pedazos: el javascript tiene que representar el json. La desventaja de esto es que, para cualquier cosa dinámica (como desplazamiento interminable o cuadrículas), tendría que crear plantillas de JavaScript de todos modos ... así que ahora tengo plantillas HAML del lado del servidor, plantillas de JavaScript del lado del cliente, y mucho más a la memoria caché.
Mi pregunta es, ¿hay algún consenso sobre cómo abordar esto? ¿Cuáles son los beneficios y desventajas de su experiencia de mezclar los dos versus ir al 100% con uno sobre el otro?
Actualización:
Algunas de las razones que tener en cuenta en qué todavía no he tomado la decisión de seguir con el 100% javascript plantillas son:
- Rendimiento. No lo he probado formalmente, pero por lo que he visto, el html crudo rinde más rápido y con más fluidez que el html cross-browser generado por javascript. Además, no estoy seguro de cómo los dispositivos móviles manejan el html dinámico en cuanto al rendimiento.
- Prueba. Tengo un montón de pruebas de integración que funcionan bien con HTML estático, por lo que cambiar a javascript solo requeriría 1) prueba de javascript pura más centrada (jasmine), y 2) integración de javascript en las pruebas de integración de capibaras. Esto es solo una cuestión de tiempo y trabajo, pero probablemente sea significativo.
- Mantenimiento. Deshacerse de HAML. Me encanta HAML, es tan fácil de escribir, imprime bonito HTML ... Hace que el código esté limpio, hace que el mantenimiento sea fácil. Yendo con javascript, no hay nada tan conciso.
- SEO.Sé que Google maneja el ajax
/#!/path
, pero no he entendido cómo afectará esto a otros motores de búsqueda y cómo lo manejan los navegadores más antiguos. Parece que requeriría una configuración significativa.
Has notado que Twitter las páginas se cargan instantáneamente en lugar de tomar 0.5-1s para cargar. Si la carga está esperando por el navegador o por el javascript hace poca diferencia. – Raynos
Buena pregunta. Va a ser interesante leer las respuestas. Me gustaría un enfoque mixto con HTML estático y plantillas si el rendimiento fue crítico. – jimmystormig
Actualización. Hecho http://towerjs.org. Ahora construyo toda la aplicación en plantillas de JavaScript y JavaScript. –