Investigando un poco por aquí y por allí acerca de cómo mejorar los tiempos de carga de páginas web o de contenidos obtenidos a través de APIs, me encontré con algunas tecnologías a las cuales su momento de brillar y ser útiles les ha llegado.
En esta ocasión me refiero específicamente a los protocolos gRPC y HTTP/2, los cuales, en ocasiones, vienen tomados de la mano ya que el primero no puede operar sin el segundo, pero como lo contrario no es cierto, me enfocaré en HTTP/2 para este breve escrito. Sobre gRPC hablaré en un próximo artículo.
Como es harto conocido, el protocolo que mueve a la WWW es principalmente el HyperText Transfer Protocol, mejor conocido como nuestro viejo amigo HTTP.
HTTP nos ha traído hasta donde estamos hoy en día, ofreciendo un fundamento sólido, estándar y confiable, pero como a toda tecnología, los cambios evolutivos de la realidad le han hecho mella y ya muestra algunos signos de obsolescencia.
En mi opinión, el principal dolor que HTTP/2 viene a aliviar es el de la velocidad de carga de los documentos a un navegador. Al ofrecer multiplexación (la capacidad de resolver varias llamadas en simultáneo) los documentos a desplegar en el navegador, típicamente una combinación de HTML, CSS, Javascript e imágenes, los tiempos de carga son menores ya que la carga de los diferentes recursos, aún en un caso muy desfavorable, se solapa, ahorrando tiempo en el proceso.
El siguiente diagrama ilustra el proceso de una requisición de carga de un documento muy simple:
Al pensar en documentos más complejos con decenas de imágenes, hojas de estilos
y librerías en Javascript, podemos visualizar fácilmente como el ahorro de unas
pocas décimas de segundo en cada interacción puede tener un impacto muy
positivo en el tiempo total de descarga, pero los ahorros no solo se enfocan en
tener multiplexación, al haber menos requisiciones también hay menos datos que
transferir desde y hacia el navegador, al no tener que abrir y cerrar
continuamente las conexiones (HTTP/2 mantiene una conexión abierta durante toda
la sesión) hay ahorros al no crear tanta latencia por los requerimientos del
propio protocolo. Así que, si sumamos todos los pequeños ahorros, con HTTP/2
podemos tener un tiempo total de carga que puede estar entre el 30% y 50% por
debajo del tiempo total requerido con nuestro querido, pero cansado amigo
HTTP/1.1.
Estas no son las únicas ventajas de utilizar la nueva versión del protocolo,
pero puede que sean las más visibles y reconocidas. Pronto estaré escribiendo
sobre la bi-direccionalidad de la comunicación (full-duplex), su paralelismo
con los WebSockets y otros detalles como la priorización de flujos de datos,
compresión de cabeceras y si, cómo no, algunas vulnerabilidades, que no faltan
nunca.
Si no puedes esperar para leer más sobre el tema, hay
un documento en la web de Desarrolladores de Google que te puede dar muchos
detalles de interés, puedes consultarlo aquí.
En el próximo artículo escribiré sobre qué necesitas para implementar este
protocolo en tus aplicaciones, con un ejemplo, claro está.
¿Usas esta versión del protocolo HTTP? De ser asi, me encantaría saber tu opinión.
Valle de Tahodio, Tenerife, visto desde Jardina.