[pyar] Aplicaciones web en tiempo real y duplicación de código en el front-end
Facundo Olano
facundo.olano en gmail.com
Dom Feb 5 17:23:24 ART 2012
Qué tal;
Ultimamente estuve trabajando en una aplicación Django, en la que se
requería mucha actualización en tiempo real de los contenidos de la página.
A lo que me refiero con actualización en tiempo real es que el servidor
podía publicar modificaciones y los clientes que estaban suscriptos a ellas
modificaban la página en consecuencia.
El problema recurrente con el que me encontré es que existía una cierta
duplicación entre la construcción de las páginas "estáticamente" con los
templates de django, al cargarlas, y la actualización "a mano" que tenía
que hacer con js cuando el server publicaba una modifiación. Por citar un
ejemplo, tenía chats embebidos que al cargar la página mostraban los
últimos mensajes (esto lo hacía con un for en el template) y a su vez cada
vez que entraba un mensaje nuevo, recibía desde el servidor los parámetros
(nombre, avatar, contenido) vía json y armaba el div usando js/jquery. Si
modificaba la estructura html del mensaje de chat tenía actualizar tanto el
template django, como la función js que lo construía en las
actualizaciones. Y éste es solo un caso simple; había otros elementos más
complejos en la interfaz que reflejaban distintos estados de modelos de
django, y más allá de la duplicación, se volvía muy engorrosa la lógica
involucrada en el front end para manterlos consistentes.
Entiendo que este tipo de aplicaciones son relativamente cotidianas, así
que me interesa conocer qué experiencia tienen tratando de resolverlas de
manera consistente y elegante. Las soluciones que encuentro son:
- Renderizar en el servidor los divs que haya que actualizar, usando
templates de django y mandar eso en el json en vez de los parámetros que
cambiaron. Esto es lo que hice en su momento, aunque no soluciona del todo
el problema y para mi gusto hace en el servidor cosas que estarían mejor en
el cliente.
- Usar alguna forma de templating en el cliente, por ejemplo
Mustache<http://mustache.github.com/>.
Lo que me gusta de esta solución es que podría reusar los templates tanto
en cliente como en el servidor, sería similar a lo que hago ahora con los
de django, pero moviendo el trabajo al cliente.
- Usar alguna librería js, por ejemplo
Knockout.js<http://knockoutjs.com/documentation/observables.html>,
que simplifique la tarea de mantener la consistencia entre el modelo
server-side y el contenido HTML que refleja su estado.
- Ya el caso extremo (y que preferiría evitar) sería considerar
abandonar django del todo y en el futuro este tipo de aplicaciones
resolverlas con alguna combinación de frameworks js que me permita reusar
código en backend y frontend (algo del estilo node.js+backbone.js+
socket.io+CoffeeScript).
La última alternativa escapa un poco a esta lista, pero sería interesante
saber si alguien tuvo experiencia combinando Django (u otro framework de
similares características) con Mustache, Knockout u otras herramientas para
tratar de resolver los problemas que describí.
Saludos,
Facundo.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20120205/17d75a1e/attachment.html>
More information about the pyar
mailing list