El nombre Bigpipe, fue utilizado por facebook, quienes en 2010, hicieron pública esta técnica utilizada para mejorar el rendimiento de su red social en el artículo BigPipe: Pipelining web pages for high performance. Desde entonces ha sido tomado como modelo para aumentar el rendimiento de sitios de alto tráfico que contienen mucha información personalizada.
La idea fundamental es separar los elementos que no cambian entre peticiones, de los elementos dinámicos. Esta parte que no cambia entre peticiones se almacena en una caché, de tal manera que no tiene que procesarse cada vez. Al responder a una petición primero se entrega esta parte almacenada en caché, que usualmente representa la estructura de la página y luego se van cargando de forma paralela, con javascript, los elementos dinámicos.
Los elementos dinámicos son precisamente los que pueden cambiar entre peticiones. Para ilustrarlo, imaginemos que estamos en una página de e-learning el bloque donde aparecen los cursos aprobados es propio del usuario, de tal manera que no se puede reutilizar para todas las personas y esa información debe generarse por cada alumno. Por tanto, no se puede almacenar en una caché de toda la página para usuarios autenticados. En vez del elemento en sí mismo se coloca un plaholder, que luego será reemplazado por el "contenido real" del elemento. Esto es un beneficio en dos sentidos:
- Estos elementos al tener que generarse de forma "personalizada", toman más tiempo en estar disponibles. Así que "ir adelantando" en presentar lo que ya se tiene mientras se generan, ayuda a ir mostrando "algo" mientras se espera.
- Para el usuario final la sensación es de mayor velocidad. Aún cuando en algunos casos el tiempo total de respuesta sea casi igual, o en algún raro, caso hasta mayor.
Bigpipe es posible en Drupal gracias al módulo Dynamic Page Cache. El módulo Dynamic Page Cache llega hasta la generación de la caché de la página con los placeholders. Además tenemos el módulo Bigpipe, que fue lanzado como experimental. Lo que hace Bigpipe es hacer que no se completen esos placeholders en la respuesta del servidor, sino que se entregue dicha caché de página "incompleta", y el cliente, con un javascript complete la carga de dichos elementos haciendo peticiones adicionales, asíncronas, al servidor.
Como ya se mencionó uno de los beneficios de Bigpipe es la impresión del usuario de que página carga mucho más rápido, aún cuando, en muchos casos, dependiendo la tecnología utilizada y los bloques de información el tiempo total de carga puede ser el mismo.
Dries ha dedicado varios post de blog a este tema. En uno de ellos escribía acerca del rendimiento de Drupal 8. En otrol anunciaba ya la existencia del módulo Bigpipe para Drupal 8
Se puede apreciar su gran optimismo con respecto a las ventajas de este sistema en Drupal.
Me pareció interesante el artículo
Añadir nuevo comentario