2010-08-02 7 views
6

Cuando se actualiza el código del lado del servidor (relacionado con JavaScript), los archivos JavaScript anteriores se sirven desde la memoria caché.¿Cómo resolver el problema con los archivos javascript servidos desde el caché?

Necesito una solución donde los archivos antiguos de JavaScript se actualicen a sus versiones más recientes. La memoria caché del navegador (relacionada con JavaScript) debe invalidarse una vez que se actualicen los archivos en el servidor.

Tengo la siguiente solución a este problema.

var randomnumber=Math.floor(Math.random()*10000); 

var scriptfile='http://www.whatever.com/myjs.js?rnd='+randnumber; 

Pero necesito borrar el caché solo cuando hay alguna actualización de los archivos de JavaScript que no están en cada recarga de la página.

Respuesta

14

mayoría de los sitios - incluyendo desbordamiento de pila - utilizan un número de revisión de su sistema de control de versiones para esto:

var scriptfile='http://www.whatever.com/myjs.js?rnd='+revision_number; 

cada vez que cambia de revisión, el navegador consigue apuntaban a una "nueva" archivo JavaScript.

También puede hacerlo manualmente, especificando un número de versión en algún lugar central y agregando ese número de versión a cada llamada de script. Cuando actualiza una parte de JavaScript, simplemente incrementa el número de versión.

Un tercer enfoque sería el registro de la "última modificación" tiempo de los archivos JavaScript está incluyendo, y la construcción de una marca de tiempo de él:

var scriptfile='http://www.whatever.com/myjs.js?version=20100803'; 

pero eso requeriría de script del lado del servidor y puede ser demasiado costoso de hacer en cada solicitud de página.

7

En lugar de utilizar un número aleatorio, utilice un número de versión o actualización de marca de tiempo, por lo que se convierte en:

var script = 'http://mysite.com/the_script.js?2010-08-02'; 

// or 

var script = 'http://mysite.com/the_script.js?v1.20'; 

Si no desea actualizar de forma manual, puede utilizar un script que busca make para y reemplaza una etiqueta con un número de versión:

var script = 'http://mysite.com/the_script.js?{{script_update_date}}'; 

// have a shell script find and replace the above {{ }} tag with the date or such 
// when deploying to production 

o si el sistema de control de versiones lo utiliza (como SVN) puede ser sustituido con el número de revisión de modo que se actualiza cuando una nueva secuencia de comandos se registró

+0

@Pekka y Jesse Dhillon- Muchas gracias por su sugerencia – Dora

Cuestiones relacionadas