it-swarm.com.ru

Chrome DevTools "отключает кеш": что он на самом деле делает, кроме всего прочего (для служебных сценариев)?

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

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

 enter image description here

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

Правка

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

8
drmrbrewer

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

На предоставленном вами снимке экрана столбец Name обрезан, поэтому я не могу сказать, какой ресурс все еще обслуживается из дискового кэша. Я предполагаю, что это сценарий работника сервиса, основанный на описании в вашем «РЕДАКТИРОВАТЬ».

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

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

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

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

    Empty cache and hard reload

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

11
Kayce Basques

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

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

1
mrid