Chrome DevTools "отключить кэш": что он на самом деле делает, кроме ничего (для сценариев service worker)?

Я пытаюсь проверить поведение моего сайта в предположении, что локальный дисковый кэш пуст. Я знаю, что есть способы очистки кэша и делать Ctrl-F5 и т. д. Каждый раз, но есть также флажок "Отключить кэш" на вкладке "Сеть", который кажется должны делай то, что я хочу... т. е. отключить кэш.

но, когда я очищаю кэш, включите эту опцию и F5-перезагрузите мой сайт пару раз, это то, что я см.:

enter image description here

ресурс был кэширован и обслуживается из кэша, несмотря на то, что "отключить кэш" включен! Так что же на самом деле делает этот вариант?

редактировать

может быть, это поведение, которое я вижу, относится только к кэшированию сценариев service worker? Если вы загрузите на этой странице (пример, связанный с данное руководство обслуживающим работникам), по крайней мере для меня sw.js файл извлекается с диска кэш даже с включенным" отключить кэш".

2 ответов


интересный вопрос!

на скриншоте, который вы предоставили,имя столбец отрезан, поэтому я не могу сказать, какой ресурс все еще обслуживается из дискового кэша. Я предположу, что это сценарий service worker, основанный на описании в вашем "EDIT".

вопрос, на который я отвечу, тогда: "как скрипты работника службы кэша браузера (SW)?"

  1. когда SW регистрируется, браузер сохраняет сценарий SW в отдельном база данных в кэше диска. Я просто назову это база данных SW, но обратите внимание, это не официальный термин. Обратите внимание, что если работник службы вызывает importScripts(), эти скрипты также хранятся в базе данных SW. Также обратите внимание, что при обновлении сценария service worker браузер перезаписывает текущий сценарий в базе данных SW новым сценарием. Это реализация Chrome, другие браузеры могут делать это по-другому. 1
  2. каждый раз, когда вы загружаете страницу, браузер делает невидимый запрос (т. е. вы не можете видеть это в DevTools), чтобы увидеть, есть ли какие-либо обновления для сценария service worker. IMO, DevTools должны предоставить этот запрос, чтобы разработчики получили лучшее представление о жизненном цикле SW.
    • если один байт сценария отличается, то браузер обновляет сценарий SW в базе данных SW.
    • если сценарий SW не изменился, браузер просто обслуживает скрипт из базы данных SW. этой это запрос, который вы видите в DevTools. ИМО вводит в заблуждение, что DevTools описывает этот запрос как (from disk cache). В идеале он должен иметь какое-то другое имя, чтобы указать, что этот кэш не зависит от Отключить Кэш.

Итак, в этом случае, вы правы:отключить кэш ничего не делает. Если вы хотите убедиться, что ваш кэш полностью очищено (включая материал работника службы):

  1. перейти к Очистить Хранилище панели, убедитесь, что все флажки включены, а затем нажмите Очистить Данные Сайта.
  2. в то время как DevTools все еще открыт, длительное нажатие Chrome перезагрузка и выберите пустой кэш и жесткая перезагрузка. См.https://stackoverflow.com/a/14969509/1669860 для объяснения этих различных опции.

    Empty cache and hard reload

1 я получил эту информацию от Алекса Рассела, инженера Chrome и соавтора спецификации service worker


в дополнение к опции Отключить кэш, на сетевой панели инструментов разработчика теперь вы можете щелкнуть правой кнопкой мыши и выбрать "очистить кэш" из всплывающего меню.

кроме того, вы можете использовать этот плагин, если вам нужно часто очистить кэш : https://chrome.google.com/webstore/detail/jpfbieopdmepaolggioebjmedmclkbap