Pregunta

Es común querer que los navegadores almacenen en caché recursos: JavaScript, CSS, imágenes, etc.hasta que haya una nueva versión disponible y luego asegúrese de que el navegador obtenga y almacene en caché la nueva versión.

Una solución es incrustar un número de versión en el nombre de archivo del recurso, pero ¿colocar los recursos que se administrarán de esta manera en un directorio con un número de revisión hará lo mismo?¿Se utiliza la URL completa del archivo como clave en la memoria caché del navegador, o es solo el nombre del archivo en sí y algunos metadatos?

Si mi código cambia de buscar /r20/example.js a /r21/example.js, ¿puedo estar seguro de que la revisión 20 de example.js se almacenó en caché, pero ahora se obtuvo la revisión 21 y ahora está en caché.

¿Fue útil?

Solución

Sí, cualquier cambio en cualquier parte de la URL (excluyendo los cambios de los protocolos HTTP y HTTPS) es interpretado como un recurso diferente por el navegador (y cualquier proxy intermediario) y, por lo tanto, dará como resultado una entidad separada en la caché del navegador.

Actualizar:

El reclamo en este artículo de ThinkVitamin que los navegadores Opera y Safari/Webkit no almacenen en caché las URL con ?query=strings es FALSO.

Agregar un parámetro de número de versión a una URL es una forma perfectamente aceptable de realizar una eliminación de caché.

Lo que puede haber confundido al autor del artículo de ThinkVitamin es el hecho de que presionar Enter en la barra de dirección/ubicación en Safari y Opera da como resultado un comportamiento diferente para las URL con una cadena de consulta.

Sin embargo, (¡Y esta es la parte importante!) Ópera y Safari comportarse como IE y Firefox Cuando se trata de almacenar en caché las imágenes y las hojas de estilo y las hojas de estilo en las páginas web, independientemente de si tienen "?" personajes en sus URL.(Esto se puede verificar con una prueba simple en un servidor Apache normal).

(Habría comentado la respuesta actualmente aceptada si tuviera la reputación para hacerlo.:-)

Otros consejos

La clave de caché del navegador es una combinación del método de solicitud y el URI del recurso.URI consta de esquema, autoridad, ruta, consulta y fragmento.

Extracto relevante de Especificación HTTP 1.1:

La clave de caché principal consta del método de solicitud y el URI de destino.Sin embargo, dado que los cachés HTTP en uso común hoy en día se limitan generalmente a las respuestas de almacenamiento en caché para obtener, muchos cachés simplemente rechazan otros métodos y usan solo el URI como la clave de caché principal.

Extracto relevante de especificación URI:

La sintaxis genérica de URI consiste en una secuencia jerárquica de componentes denominados esquema, autoridad, ruta, consulta y fragmento.

URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part   = "//" authority path-abempty
              / path-absolute
              / path-rootless
              / path-empty

Estoy 99,99999% seguro de que es la URL completa la que se utiliza para almacenar en caché los recursos en un navegador, por lo que su esquema de URL debería funcionar bien.

El MÍNIMO que necesita para identificar un objeto HTTP es la ruta completa, incluidos los parámetros de cadena de consulta.Es posible que algunos navegadores no almacenen en caché objetos con una cadena de consulta, pero eso no tiene nada que ver con la clave del caché.

También es importante recordar que el camino ya no es suficiente.La variedad:El encabezado en la respuesta HTTP alerta al navegador (o servidor proxy, etc.) de cualquier cosa DISTINTA de la URL que debe usarse para determinar la clave de caché, como cookies, valores de codificación, etc.

Para su pregunta básica, sí, cambiar la URL del archivo .js es suficiente.A la pregunta más amplia de qué determina la clave de caché, es la URL más el Vary:restricciones de encabezado.

Sí.Una ruta diferente es la misma desde la perspectiva de los cachés.

Por supuesto, tiene que usar la ruta completa '/r20/example.js' vs '/r21/example.js', para empezar, podrían ser imágenes completamente diferentes.Lo que sugieres es una forma viable de manejar el control de versiones.

En la mayoría de los navegadores se utiliza la URL completa.En algunos navegadores, si tiene una consulta en la URL, el documento nunca se almacenará en caché.

URL completa.He visto un comportamiento extraño en algunos navegadores antiguos donde entraba en juego la distinción entre mayúsculas y minúsculas.

Además de las respuestas existentes, solo quiero agregar que es posible que no se aplique si usa ServiceWorkers o, por ejemplo, un complemento sin conexión.Entonces podría experimentar diferentes reglas de caché dependiendo de cómo estén configurados los ServiceWorkers.

depende.se supone que es la URL completa, pero algunos navegadores (Opera, Safari2) aplican una estrategia de caché diferente para URL con diferentes parámetros.

lo mejor es cambiar el nombre del archivo.

Hay una solución muy inteligente aquí (usa PHP, Apache)

http://verens.com/archives/2008/04/09/javascript-cache-problem-solved/

Notas de estrategia:“De acuerdo con la letra de la especificación de almacenamiento en caché HTTP, los agentes de usuario nunca deben almacenar en caché las URL con cadenas de consulta.Mientras que Internet Explorer y Firefox ignoran esto, Opera y Safari no lo hacen; para asegurarnos de que todos los agentes de usuario puedan almacenar en caché sus recursos, debemos mantener las cadenas de consulta fuera de sus URL”.

http://www.thinkvitamin.com/features/webapps/serving-javascript-fast

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top