Obligar a Google Chrome a buscar nuevos archivos JavaScript cada vez que accedo a un sitio web


25

Entonces, si voy a las opciones de Internet en Internet Explorer: ingrese la descripción de la imagen aquí

Puedo ajustar la configuración para cuando IE busque actualizaciones: ingrese la descripción de la imagen aquí

¿Puedo hacer algo similar en Google Chrome? En este momento, cuando cambio mi archivo JavaScript y depuro desde Visual Studio, Chrome siempre usará la versión en caché en lugar de usar la versión modificada. Para poder usar la versión actual, tengo que borrar manualmente mis archivos temporales de Internet / caché, lo cual es realmente molesto.


14
¿Por qué no deshabilita el almacenamiento en caché realizado por Visual Studio en su lugar? (En serio, ¿quién diablos diseña un IDE con almacenamiento en caché?)
jpmc26

2
@ jpmc26 ¿Qué almacenamiento en caché?
EJoshuaS - Restablece a Mónica el

21
Redacté mi último comentario libremente; Mis disculpas si eso no lo dejó claro. Los navegadores solo almacenan en caché los archivos si el servidor devuelve encabezados específicos. Es estúpido que el servidor de desarrollo de Visual Studio envíe los encabezados de caché de forma predeterminada, ya que se deben esperar cambios en esos archivos . Vale la pena no cargar una página adicional de un segundo en cargar los problemas de archivos JS y CSS obsoletos que se almacenan en caché en el navegador. Sinceramente espero que haya alguna forma de desactivarlo.
jpmc26

1
No se encontraron opciones de Visual Studio, pero un cambio de desarrollo web.config puede resolver el almacenamiento en caché en Visual Studio. iis.net/configreference/system.webserver/staticcontent/…
GER

1
Chrome extensión "Cache Killer" resuelto por mí, no sé por qué, pero CTRL + F5 veces no funciona para mí
flagg19

Respuestas:


55

Opción 1: deshabilitar el caché temporalmente

  1. Herramientas para desarrolladores abiertas (presione F12o Menú, Más herramientas, Herramientas para desarrolladores)
  2. Abra la configuración de las herramientas del desarrollador ( F1presione o Menú de DevTools, Configuración)
  3. Marque "Deshabilitar caché (mientras DevTools está abierto)" en el encabezado Red del panel Preferencias

Opción 2: deshabilitar el caché para la sesión

Inicie Chrome con los interruptores de línea de comandos --disk-cache-size=1 --media-cache-size=1que limitarán las memorias caché a 1 byte, deshabilitando efectivamente la memoria caché.

Opción 3: Actualización manual forzada

Vuelva a cargar la página actual, ignorando el contenido en caché: Shift+ F5o Ctrl+ Shift+r

Atajos de teclado de Chrome - Ayuda de Chrome (en "Atajos de página web")

Opción 4: Opciones de recarga adicionales ( fuente )

Con las Herramientas para desarrolladores abiertas, haga clic con el botón derecho en el botón Recargar para mostrar un menú de recarga con lo siguiente:

  • Recarga normal (Ctrl + R)
  • Recarga dura (Ctrl + Shift + R)
  • Caché vacía y recarga dura

1
@Bruno Odd, también siempre usé ctrl + f5. Acabo de probar y ambos parecen funcionar.
Jeroen

Sugiero usar la opción 2, con un giro. Cree un acceso directo a Chrome con los interruptores y asígnele un nombre diferente. Póngalo en diferentes extremos de su barra de tareas de Windows.
Christopher Hostage

8

Puede que no esté 100% relacionado con la actualización de Chrome, pero para un mayor desarrollo. Como dijo @Dom, puede agregar un? V = # después de su recurso. Una forma de automatizar el proceso es hacer hash del contenido de dicho archivo y usarlo como versión.

Tengo un código de fragmento sobre cómo hacerlo en C # (Razor para implementación) si esto puede ayudar.

Ayudante:

public static string HashUrl(string relativeUrl)
    {
        var server = HttpContext.Current.Server;
        if (File.Exists(server.MapPath(relativeUrl)))
        {
            byte[] hashData;
            using (var md5 = MD5.Create())
            using (var stream = File.OpenRead(server.MapPath(relativeUrl)))
                hashData = md5.ComputeHash(stream);

            return relativeUrl.Replace("~", "") + "?v=" + BitConverter.ToString(hashData).Replace("-", "");
        }
        return relativeUrl + "?v=notFound";
    }

Implementación:

<link rel="stylesheet" href=@Util.HashUrl("~/Controllers/Home/Views/Index.css") />

Espero que esto ayude

EDITAR --- Algunos han pedido un tiempo de ejecución de compilación y 1000 recursos pequeños, se tarda aproximadamente 11 ms.

https://en.code-bude.net/2013/08/07/md5-hashes-in-c-benchmark-and-speed-%E2%80%8B%E2%80%8Boptimization/

ingrese la descripción de la imagen aquí https://en.code-bude.net/wp-content/uploads/2013/08/md5_performance_benchmark_2.png


2
El control de versiones de recursos como este (o al incorporar la versión / hash en el nombre del recurso en sí) puede ser muy útil, especialmente al implementar actualizaciones en el mundo real, donde, al contrario de lo que dicen las reglas sobre el encabezado de control de caché, de todas maneras de almacenamiento en caché puede estar ocurriendo, y muchos usuarios no sabrán cómo (o la necesidad de) actualizar el caché. Si (crea su aplicación) solicita un recurso recientemente nombrado, no se puede almacenar en caché.
TripeHound

1
¿No es esta una gran pérdida de rendimiento? Hashing cada archivo css y js cada vez que se inserta un enlace en una página ... ¿Ha ejecutado puntos de referencia para esto?
Raidri dice Reinstate Monica el

2
@Raidri Hashing sobre la marcha probablemente no sea una buena idea (no me había dado cuenta de que estaba haciendo esto cuando comenté por primera vez). Se actualizan las referencias para usar un hash o una versión durante el proceso de compilación.
TripeHound

@Raidri Tengo una aplicación bastante pequeña con 20 recursos meaby que heh y no he visto una diferencia en el tiempo de compilación, así que realmente no intenté compararlo. Además, no estoy seguro de entender su segunda oración, pero los recursos se almacenan en caché y el navegador solo los recupera si el hash change => si cambia el recurso en sí.
fred beauchamp

El hash no se calcula en el momento de la compilación, sino en cada generación de página. Ese es un problema del servidor y no tiene nada que ver con el almacenamiento en caché en el navegador.
Raidri dice Restablecer a Mónica el

5

En otros casos en los que esto puede no ser posible, por ejemplo, si desea forzar una actualización en la computadora de un usuario final a la que no tiene acceso, puede agregar un número de versión al nombre del script como parámetro de consulta para que el navegador identifique como un archivo diferente . es decir. example.js?v=1. Tenga en cuenta que necesitaría cambiar el número en cada recarga para forzarlo.

También podría hacer esto con el desarrollo local, pero el método de herramientas de desarrollo es mucho más eficiente.


3

Además de la respuesta @Steven, cuando abra la Consola de herramientas del desarrollador , puede hacer clic con el botón derecho en el botón Actualizar y usar el menú desplegable.

En este menú tiene una opción para "Vaciar caché y recarga dura" .

Es lo que estás buscando.


1
Supongo que está utilizando una versión de Chrome que no está en inglés. Yo uso la versión en inglés, y se llama "Vaciar caché y recarga dura".
Nzall

1

Si está desarrollando el sitio, debe saber que Chrome requiere la must-revalidateconfiguración Cache-Controlpara volver a buscar los archivos correctamente cuando se cambian en el servidor.

Las otras respuestas le dicen cómo presionar SHIFT-F5 para forzar a su propia versión de Chrome a recuperar todos los archivos. ¿Pero es razonable decirle a todos los usuarios del sitio que hagan esto cada vez que el sitio cambie? Si configura la Cache-Controlinclusión must-revalidate, Chrome verificará si algún archivo ha cambiado y luego lo descargará correctamente cuando sea necesario.

Vea los detalles en esta publicación de blog: https://agiletribe.wordpress.com/2018/01/29/caching-for-chrome/

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.