¿Cómo puedo obligar a los clientes a actualizar los archivos JavaScript?

Resuelto AdamB asked hace 16 años • 30 respuestas

Actualmente estamos trabajando en una versión beta privada y, por lo tanto, todavía estamos en el proceso de realizar cambios bastante rápidos, aunque obviamente, a medida que el uso comience a aumentar, ralentizaremos este proceso. Dicho esto, un problema con el que nos encontramos es que después de publicar una actualización con nuevos archivos JavaScript, los navegadores del cliente todavía usan la versión en caché del archivo y no ven la actualización. Obviamente, en una llamada de soporte, podemos simplemente informarles que realicen una ctrlF5actualización para asegurarnos de que obtengan los archivos actualizados del servidor, pero sería preferible manejar esto antes de ese momento.

Nuestra idea actual es simplemente adjuntar un número de versión al nombre de los archivos JavaScript y luego, cuando se realicen cambios, incrementar la versión en el script y actualizar todas las referencias. Esto definitivamente hace el trabajo, pero actualizar las referencias en cada versión puede resultar engorroso.

Como estoy seguro de que no somos los primeros en lidiar con esto, pensé en decírselo a la comunidad. ¿Cómo se asegura de que los clientes actualicen su caché cuando actualiza su código? Si está utilizando el método descrito anteriormente, ¿está utilizando un proceso que simplifica el cambio?

AdamB avatar Aug 28 '08 21:08 AdamB
Aceptado

Hasta donde yo sé, una solución común es agregar un ?<version>enlace src al script.

Por ejemplo:

<script type="text/javascript" src="myfile.js?1500"></script>

Supongo en este punto que no hay mejor manera que buscar y reemplazar para incrementar estos "números de versión" en todas las etiquetas del script.

¿Es posible que tenga un sistema de control de versiones que haga eso por usted? La mayoría de los sistemas de control de versiones tienen una forma de inyectar automáticamente el número de revisión al realizar el check-in, por ejemplo.

Se vería algo como esto:

<script type="text/javascript" src="myfile.js?$$REVISION$$"></script>

Por supuesto, siempre hay mejores soluciones como ésta .

Huppie avatar Aug 28 '2008 14:08 Huppie

Agregar la hora actual a la URL es de hecho una solución común. Sin embargo, también puedes gestionar esto a nivel del servidor web, si así lo deseas. El servidor se puede configurar para enviar diferentes encabezados HTTP para archivos javascript.

Por ejemplo, para forzar que el archivo se almacene en caché por no más de 1 día, enviaría:

Cache-Control: max-age=86400, must-revalidate

Para la versión beta, si desea obligar al usuario a obtener siempre la última versión, deberá utilizar:

Cache-Control: no-cache, must-revalidate
Chase Seibert avatar Sep 17 '2008 16:09 Chase Seibert