2008-10-15 19 views
50

Tengo un recurso de JavaScript que tiene la posibilidad de ser editado en cualquier momento. Una vez editado, me gustaría que se propague al navegador del usuario de forma relativamente rápida (como unos 15 minutos aproximadamente), sin embargo, la frecuencia de edición de este recurso es escasa (quizás 2 al mes).¿Cuándo el navegador borra automáticamente el caché del archivo JavaScript externo?

Prefiero que el recurso se almacene en la memoria caché en el navegador, ya que se recuperará con frecuencia, pero también me gustaría que la caché se reinicie en el navegador en un intervalo semi-regular.

Sé que puedo pasar un encabezado sin caché cuando solicito el recurso, pero me preguntaba cuándo el caché se reiniciaría automáticamente en el navegador si no pasara no-cache.

Imagino que esto sería independiente para cada navegador, pero no estoy seguro.

Intenté Google esto, pero la mayoría de los hits que encontré fueron sobre borrar el caché del navegador ... que no es lo que estoy buscando.

Respuesta

53

Puede pasar una cadena de versión como un parámetro GET a la URL de su etiqueta de script. El parámetro no será evaluado por el archivo JavaScript estático, pero obligará al navegador a obtener la nueva versión.

Si no desea asignar la cadena de versión cada vez que se editó la fuente puede calcular que en base a la marca de tiempo del sistema de archivos o de su subversión cometer número:

<script src="/script.js?time_stamp=1224147832156" type="text/javascript"></script> 
<script src="/script.js?svn_version=678" type="text/javascript"></script> 

+0

Sí, esto es exactamente lo que hacemos. Lo mismo para los archivos CSS externos. – dmercer

+0

es el javascript para el svn_version = 678 almacenado en la memoria caché, o se vuelve a cargar cada vez (porque hay un parámetro get adjunto)? – Beerweasle

+0

Este enfoque también se usó en Ruby on Rails. – alessioalex

14

Ponga una versión en su código javascript como éste, que se actualiza cuando se realiza un cambio

<script src="/code.js?ver=123" type="text/javascript"></script> 

A continuación, siempre conseguir una nueva versión.

+12

Por supuesto, que asume que el HTML no se almacena en caché también;;) – RodeoClown

13

HTTP proporciona varios controles para el almacenamiento en caché que los navegadores ignoran de diferentes maneras. Si establece una fecha de caducidad razonable, la mayoría de los navegadores verificarán si tienen la versión actual con las frecuencias apropiadas.

El término de búsqueda que desea incluir aquí (para evitar las instrucciones del navegador) es HTTP.

Para más información, véase:

Cuestiones relacionadas