Кэш памяти Chrome против кеша диска

98

Меня интересует кеш памяти Chrome против кеша диска? Я использую webpack, плагин common chunks и генерирую все свои файлы с помощью chunkhash.

Чем память отличается от дискового кеша. Когда я перезагружаю свою страницу, некоторые файлы загружаются из кеша памяти, а некоторые из кеша диска (bundle.js и image.jpg из кеша памяти и css из кеша диска). Иногда бывает иначе. Можем ли мы это контролировать, выбирать, что откуда загружается? Кэш памяти кажется быстрее, чем кеш диска.

Игорь-Вук
источник
1
Привет, Игорь! Это вызвало проблемы с загрузкой webpack? Как ты это решил?
Rejoy
1
Проблем не было. Это просто функция кеширования браузера, которая кэширует файлы пакетов веб-пакетов.
Игорь-Вук
Привет, Игорь, я вижу, что это проблема, когда некоторые связанные файлы загружаются с диска, а некоторые - из памяти. Когда это происходит, он выдает ошибку JSONP. Это случается лишь в редких случаях.
Rejoy
se / SuperUser
chharvey

Ответы:

77

Как сказали их имена:

«Кэш памяти» хранит и загружает ресурсы в память (RAM) и из нее. Так что это намного быстрее, но непостоянно. Контент доступен, пока вы не закроете браузер.

«Дисковый кэш» постоянен. Кэшированные ресурсы хранятся и загружаются на диск и с диска.

Простой тест: откройте Chrome Developper Tools / Network. Перезагрузите страницу несколько раз. Столбец таблицы «Размер» сообщит вам, что некоторые файлы загружаются «из кеша памяти». Теперь закройте браузер, снова откройте Developper Tools / Network и снова загрузите эту страницу. Все кешированные файлы теперь загружаются «из дискового кеша», потому что ваш кеш памяти пуст.

Ruwen
источник
4
Я не знал, что это так просто.
Файзан Анвер Али Рупани
29
как браузер определяет, какие ресурсы хранить в кэше памяти, а не в кэше диска?
chharvey
11
можем ли мы настроить то, что должно кэшироваться в кеше памяти?
Игорь-Вук
1
У меня есть несколько itens в моем угловом приложении, которые загружаются с диска, когда я запускаю его локально, в производственных тезисах файлы вообще не кешируются. В производственной среде работает только кеш из памяти. Вы знаете, что могло вызвать это?
Rafael Andrade
@RafaelAndrade Имейте в виду, что angular предоставляет несколько сред (в src / environment / *. Ts). environment.prod.ts определяет вашу производительную среду сборки, а environment.ts определяет вашу локальную среду разработки. В среде локальной разработки вам в основном не нужны кешированные файлы, чтобы ваши локальные изменения всегда применялись к вашему приложению.
Ruwen
15

Chrome реализует кеши на многих уровнях абстракции. В основе лежит кеш HTTP (браузер) - бэкэнд для других механизмов кеширования. Обычно кеши можно разделить на:

  • HTTP-кеш
  • Кеши сервис-воркеров
  • Мигающий кеш

HTTP-кеш

Каждый запрос, сделанный по сети, проксируется HTTP Cache в соответствии с RFC . При первом запросе кеш перезаписывается. Ресурсы привязаны к исходному URL.

Кэш Service Worker

Для корректной обработки сбоев сетевого подключения вы можете использовать Service Workers . Кеши и кеш-хранилище снова будут взяты с диска.

Мигающий кэш

Blink использует Http Cache в качестве бэкэнда в двух режимах создания - в памяти и простом (файловая система). Какой из них используется, зависит от установленного глобального лимита для кешей, сколько памяти они могут занять. Также наибольшую долю получает текущий кеш рендерера. Кешируются шрифты, изображения и скрипты. Если использование глобальной памяти достигает определенного порогового значения, используется серверная часть файловой системы.

Принудительное использование кеша памяти

Если вы хотите, чтобы ваши файлы обслуживались с помощью механизма переопределения памяти по умолчанию, вы можете реализовать свой собственный Service Worker. Используя File Api, ресурсы можно читать и сохранять в объект в памяти. Тогда переопределение события выборки подавит чтение сети и файла с контентом, обслуживаемым этим глобальным объектом.

Доминик Г
источник