Normalmente, para optimizar la velocidad de carga de páginas y aplicaciones web, aplicamos cabeceras que cachean los recursos estáticos durante un periodo de tiempo en los navegadores de nuestros usuarios y clientes. En otras ocasiones, se emplean cachés intermedias que se encargan de realizar el mismo proceso.
Estos archivos (CSS y JS, principalmente) se suelen modificar poco y no es necesario descargarlos en cada acceso. Sin embargo, el problema surge cuando se modifica uno de estos archivos y no se sirve actualizado debido a la caché.
¿Por qué versionar archivos?
Agregar una versión a los archivos y recursos estáticos, como veremos, nos permite saltarnos la caché y servir archivos «frescos».
En resumen, agregar una variable de versión a la URL de un recurso estático lo convierte en uno «distinto» cada vez que cambia la variable. Lo que hace que la caché previa de dicho archivo se invalide y sirva el archivo actualizado.
Esto, además, nos evita los errores producidos por las versiones anteriores de los archivos y quejas de los usuarios finales al no ver cambios y/o funcionalidades actualizadas. Es decir, que en el caso de ser código para solucionar un error, dicho error siga vigente a pesar de haberse solucionado.
De no hacerlo así, nos obligaría a notificar a los usuarios indicándoles que deben borrar la cache del navegador para forzar la recarga de los archivos estáticos actualizados y/o borrar cachés intermedias.
¿Qué tipos de archivos podemos versionar?
Podemos versionar cualquier tipo archivo que se encuentre almacenado en el servidor y que se sirva como estático: CSS, JS, imágenes, PDF, etc.
Además el versionado no se ve limitado a emplear un número de versión, sino que podremos usar una fecha o cualquier otro dato que nos permita identificar dichos archivos como únicos.
De esta manera, a la hora de abordar un cambio que repercuta en actualizar ficheros estáticos de nuestro proyecto podremos cambiar la versión desde un único lugar (donde hayamos definido la propiedad).
¿Cómo versionar dichos recursos?
Lo primero que debemos hacer es crear una propiedad (que será la que empleemos como versión) en algún fichero de configuración de nuestro proyecto. En nuestro caso, vamos a crear una property en el sys.properties del proyecto:
Podemos usar el siguiente código para leer la propiedad y crear la variable:
Aplicamos la variable con la versión generada:
De una manera sencilla podemos aplicar versiones a los recursos estáticos que empleen nuestros proyectos, con el fin de forzar que se sirvan siempre actualizados.