2011-11-22 9 views
15

Si decido usar last_modified_time de un archivo javascript o css, y uso la marca de tiempo de unix como clave en el nombre para reventar el caché cuando se modifica el archivo. ¿Cuál es la diferencia entre seguir dos prácticas? nombre del archivo es: my_script.js y marca de tiempo es: 1321951817Versiones en Javascript para evitar el almacenamiento en caché, ¿diferencia en estas prácticas?

1/archivo se incluye como: <script type="text/javascript" src="http://example.com/js/my_script.js?v=1321951817"></script> Por lo tanto, el parámetro de cadena de consulta crea una nueva caché cada vez que se cambia el v.

2/archivo se incluye como: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> Los cambios de nombre de archivo con todas las modificaciones, una regla de reescritura elimina la marca de tiempo y los puntos de la URL solicitada a my_script.js

3/ACTUALIZACIÓN: UNA MÁS método basado en respuestas a continuación: Se cambia el nombre del archivo y se incluye como: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> El nombre de archivo se cambia y NO SE UTILIZA REGLA.

Pregunta: ¿Son estas dos técnicas inherentemente las mismas, o hay ventajas/desventajas de usar los parámetros de cadena de consulta en lugar del nombre de archivo directo.

+1

También puede usar el método 2) con nombres de ruta en lugar de nombres de archivo: 'http: // example.com/v-1321951817/js/my_script.js'. – user123444555621

Respuesta

22

Usar una cadena de consulta actualizada es una mala solución. Vea lo que Steve soders ha dicho al respecto: http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

El método ideal es cambiar el nombre del archivo. Algunas personas prefieren usar la marca de tiempo de la última fecha de modificación, lo que creo que es un problema.

En el desarrollo web moderno, realmente necesita optimizar su página tanto como sea posible, lo que significa que combina css y javascript en archivos individuales que se minfied. Eso significa que introduce un paso de compilación en su proceso y que la última modificación de su archivo siempre será en su última compilación. Si lo configura como su nombre de archivo, esencialmente destruye la memoria caché de los usuarios todo el tiempo, y algunas veces no es necesario.

Recomiendo cambiar el nombre de los archivos a una suma de md5 de su contenido. De esta forma, puede hacer compilaciones nuevas todo el tiempo, pero el nombre del archivo solo cambia si el contenido cambia. Esto hace que su nombre de archivo sea un identificador del contenido. Al usar esto, puede configurar un encabezado futuro que expira lejos en todo su contenido estático y simplemente dejar de preocuparse por eso.

Puedo recomendar el uso de un sistema de compilación para esto, ya que este flujo de trabajo se vuelve aburrido rápido. Hace un tiempo mi empresa abrió una fuente que hace esto entre muchas otras cosas que optimizan su página web: https://github.com/One-com/assetgraph-builder Existen muchas otras herramientas de compilación que hacen lo mismo. Eche un vistazo y encuentre el que mejor se adapte a su configuración de desarrollo.

+0

"El método ideal es cambiar el nombre del archivo en sí". ¿Por qué sería esto mejor que una regla de reescritura? – user123444555621

+3

Otra razón para no usar la marca de tiempo es que si está implementando en varios servidores, la última fecha de modificación podría cambiar. Usar un MD5 del archivo se asegurará de que sea consistente, sin importar dónde o cuántos lugares implemente. – TimE

6

Lo dices tú mismo: en el segundo ejemplo estás usando una regla de reescritura que verifica con expresiones regulares todas las páginas que estás cargando.

El primero en engañar al navegador para que piense que es un archivo diferente. Entonces, el primero es el camino a seguir.

+1

Estoy de acuerdo, la primera opción es el camino a seguir. – kamui

+0

@baklap Estoy de acuerdo con tu punto de vista. Pero, ¿cuál es el guión de mis versiones? Cambia el nombre del archivo y no se utilizan reglas de reescritura. Entonces, ¿qué es mejor? – DhruvPathak

Cuestiones relacionadas