Заставлять Google Chrome проверять наличие новых файлов JavaScript при каждом доступе к веб-сайту


25

Итак, если я иду в Internet Options в Internet Explorer: введите описание изображения здесь

Я могу настроить параметры, когда IE проверяет наличие обновлений: введите описание изображения здесь

Могу ли я сделать что-то подобное в Google Chrome? Прямо сейчас, когда я изменяю свой файл JavaScript и отлаживаю из Visual Studio, Chrome всегда будет использовать кэшированную версию, а не измененную версию. Чтобы использовать текущую версию, мне нужно вручную очистить временные файлы / кеш, которые действительно раздражают.


14
Почему бы вам не отключить кэширование, выполняемое Visual Studio? (Серьезно, кто, черт возьми, разрабатывает IDE с кешированием?)
jpmc26

2
@ jpmc26 Что за кеширование?
EJoshuaS - Восстановить Монику

21
Я сформулировал свой последний комментарий свободно; мои извинения, если это сделало это неясным. Браузеры кэшируют файлы только в том случае, если сервер отправляет обратно определенные заголовки. Для сервера разработки Visual Studio глупо отправлять обратно заголовки кэша по умолчанию, поскольку следует ожидать изменений в этих файлах . Дополнительную загрузку страницы в течение секунды стоит не иметь проблем с устаревшими файлами JS и CSS, которые кэшируются в браузере. Я искренне надеюсь, что есть способ отключить его.
jpmc26

1
Не удалось найти какие-либо параметры Visual Studio, но изменение web.config разработки может решить проблему кэширования в Visual Studio. iis.net/configreference/system.webserver/staticcontent/…
GER

1
Расширение Chrome "Cache Killer" решило это за меня, я не знаю почему, но ctrl + f5 иногда не работает для меня
flagg19

Ответы:


55

Вариант 1: временно отключить кеш

  1. Откройте Инструменты разработчика (Нажмите F12или Меню, Дополнительные инструменты, Инструменты разработчика)
  2. Откройте Настройки инструментов разработчика (нажмите F1или DevTools Menu, Настройки)
  3. Установите флажок «Отключить кэш (когда открыт DevTools)» в заголовке «Сеть» панели «Настройки».

Вариант 2: отключить кеш для сессии

Запустите Chrome с помощью переключателей командной строки, --disk-cache-size=1 --media-cache-size=1которые будут ограничивать кеш 1 байтом, эффективно отключая кеш.

Вариант 3: ручное обновление силы

Перезагрузите текущую страницу, игнорируя кэшированное содержимое: Shift+ F5или Ctrl+ Shift+r

Сочетания клавиш Chrome - Справка Chrome (в разделе « Сочетания клавиш веб-страницы»)

Вариант 4. Дополнительные параметры перезагрузки ( источник )

Открыв Инструменты разработчика, щелкните правой кнопкой мыши кнопку «Перезагрузить», чтобы отобразить меню перезагрузки со следующим:

  • Обычная перезагрузка (Ctrl + R)
  • Жесткая перезагрузка (Ctrl + Shift + R)
  • Пустой кеш и хард перезагрузка

1
@ Бруно Странно, я тоже всегда использовал ctrl + f5. Только что проверил, и оба, кажется, работают.
Йерун

Я предлагаю использовать вариант 2, с изюминкой. Сделайте отдельный ярлык для Chrome с помощью переключателей и назовите его по-другому. Поместите его в разные концы панели задач Windows.
Кристофер Заложник

8

Это может быть не на 100% связано с обновлением хрома, но для дальнейшего развития. Как сказал @Dom, вы можете добавить? V = # после своего ресурса. Одним из способов автоматизации процесса является хеширование содержимого указанного файла и использование его в качестве версии.

У меня есть фрагмент кода о том, как это сделать в C # (Razor для реализации), если это может помочь.

Helper:

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";
    }

Реализация:

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

Надеюсь это поможет

РЕДАКТИРОВАТЬ --- Некоторые попросили некоторое время выполнения сборки и для 1000 небольших ресурсов, это занимает приблизительно 11 мс.

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

введите описание изображения здесь https://en.code-bude.net/wp-content/uploads/2013/08/md5_performance_benchmark_2.png


2
Такие ресурсы управления версиями (или путем встраивания версии / хэша в само имя ресурса) могут быть очень полезны, особенно при развертывании обновлений в реальном мире, где - в отличие от того, что говорится в правилах заголовка управления кэшем - во всех отношениях кеширования может происходить, и многие пользователи не будут знать, как (или нужно) обновить кеш. Если вы (делаете свое приложение) запрашиваете недавно названный ресурс, он не может быть кэширован.
TripeHound

1
Разве это не большая потеря производительности? Хэширование каждого файла css и js каждый раз, когда на страницу вставляется ссылка ... Вы запускали тесты для этого?
Райдри говорит восстановить Монику

2
@Raidri Хэширование на лету, вероятно, не очень хорошая идея (я не заметил, что делал это, когда впервые прокомментировал). Обновление ссылок для использования хэша или версии в процессе сборки.
TripeHound

@Raidri У меня довольно маленькое приложение с meaby 20 ресурсами, которое я хэширую, и я не видел разницы во времени сборки, поэтому я не пытался его сравнить. Также я не уверен, что понимаю ваше второе предложение, но ресурсы кешируются, и браузер перезаписывает их только при изменении хэша =>, если вы меняете сам ресурс.
Фред Бошам

Хеш рассчитывается не во время сборки, а при каждом создании страницы. Это проблема сервера и не имеет ничего общего с кэшированием в браузере.
Райдри говорит восстановить Монику

5

В других случаях, когда это может быть невозможно, например, если вы хотите принудительно выполнить обновление на компьютере конечного пользователя, к которому у вас нет доступа, вы можете добавить номер версии к имени сценария в качестве параметра запроса, чтобы браузер идентифицировал это как другой файл . то есть. example.js?v=1, Имейте в виду, что вам нужно изменить число при каждой перезагрузке, чтобы заставить его.

Вы также можете сделать это с локальной разработкой, но метод dev tools гораздо эффективнее.


3

в дополнение к ответу @Steven, когда вы откроете консоль Developer Tools , вы можете щелкнуть правой кнопкой мыши на кнопке обновления и использовать раскрывающееся меню.

В этом меню вы получаете опцию «Очистить кэш и выполнить полную перезагрузку» .

Это то, что вы ищете.


1
Я предполагаю, что вы используете неанглийскую версию Chrome. Я использую английскую версию, и она называется «Пустой кэш и хард перезагрузка».
Nzall

1

Если вы разрабатываете сайт, то вы должны знать, что Chrome требует must-revalidateнастройки Cache-Control, чтобы правильно повторно выбирать файлы при их изменении на сервере.

В других ответах рассказывается, как нажать SHIFT-F5, чтобы заставить вашу собственную версию Chrome повторно загружать все файлы. Но разумно ли всем пользователям сайта делать это каждый раз, когда сайт меняется? Если вы включите Cache-Controlвключение, must-revalidateто Chrome проверит, изменились ли какие-либо файлы, а затем загрузит их должным образом при необходимости.

Подробности см. В этом сообщении в блоге: https://agiletribe.wordpress.com/2018/01/29/caching-for-chrome/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.