Esta es una traducción del artículo original publicado en el blog de Mozilla Hacks.

Con el lanzamiento de Firefox 49 se incluyo Control de cache: características inmutables que permite a las páginas web adivinar los recursos HTTP que nunca van a cambiar. Casi al mismo tiempo, Facebook empezó a implementar ampliamente esta tecnología desde el lado del servidor. Utilizan un modelo de desarrollo de versionamiento de la URI  que funciona muy bien con inmutables. Esto ha tenido gran impacto en el rendimiento de las recargas de Facebook con Firefox. Ademas parece que otros sitios lo implementarán también.

Los beneficios de los inmutables permiten que cuando una página sea refrescada, lo cual es una tarea muy común en el escenario de los medios sociales, los elementos que fueron marcados como inmutables en la cabecera de una respuesta HTTP, no tienen que ser revalidados con el servidor. Si no se hace esto, el navegador necesita saber cuales objectos han cambiados o no en la recarga, gastando tiempo por un lado o arriesgando incompatibilidad por el otro lado.

Para objetos pequeños, el trabajo de esta revalidación a través del código de respuesta HTTP 304 puede llevar tanto trabajo como transferir la totalidad de la respuesta.

Resulta que esto puede ahorrar mucho trabajo. Los recursos de la página tales como los archivos de javascript, tipografías, y hojas de estilo; no cambian entre recargas. Mas importante aún son las docenas de imágenes que no cambian – distintas imágenes pueden ser incluidas en el HTML, pero el contenido de cada una de ellas no cambia. De hecho, la única cosa que puede cambiar el la estructura del HTML.

Para los usuarios de Firefox recargar el contenido de Facebook ha sido un gran cambio – la petición mas rápida es aquella que nunca se hace, y es exactamente lo que está pasando todo el tiempo que se recarga una página de Facebook. En pruebas, la página principal típica puede estar inicialmente compuesta de 150 recursos. Al presionar refrescar en Firefox 49 se generan solo 25 peticiones.

Como puedes imaginarte, las cosas son rápidas. En pruebas, se puede reducir el tiempo de carga de una página a la mitad. Facebook también ha sido uno de los primeros en adoptar la compresión de codificación brotli. Lo usan para reducir el ancho de banda de la estructura HTML dinámica, la cual no puede ser almacenada en cache, permitiendo ahorrar 20% de los bytes transferidos cuando se compara con el antiguo estándar gzip. Brotli está disponible en Firefox desde Firefox 44.

Los servidores de Facebook también son beneficiados – una petición que nunca se hace permite ahorrar ancho de banda y uso de CPU, lo cual se puede usar para hacer el sitio mas rápido para otras peticiones.

“Este cambio cambia efectivamente la eliminación de peticiones de  revalidación de nosotros para las versiones actualizadas de Firefox las cuales, en muchos casos, pueden mejorar los tiempos de carga en segundos.” – Nathan Schloss, Ingeniero de Software, Facebook

Estamos creciendo

Facebook ha sido un gran socio en este esfuerzo. Últimamente ha estado promoviendo los inmutable y otros desarrolladores también lo están adoptando.

La BBC lo ha utilizado para pruebas:

Como anécdota, la BBC observa mejoras en los tiempos de respuestas de cargas hasta un 50%, y expresa que un 90% de las peticiones están optimizadas para ser inmutables.

Implementaciones futuristas como el  as sistema de archivos InterPlanetary también son interesantes:

También se benefician productos como el venerable proxy Squid:

Esta tecnología ha tenido suficientes pruebas en producción y realmente recomendamos su uso. Para asegurar la documentación adecuada, también se han adaptados a los estándares de la IETF. Solo necesitas es tener una cabecera de cache para empezar con tu desarrollo.