Chrome показывает высокий уровень использования кеша
Я анализировал использование кеш-памяти сложного приложения, когда понял, что сохраненное изображение или скрипт с определенной длиной содержимого N
на самом деле занимает 5N-10N
место в кеш-хранилище.
Рассмотрим этот пример: я запрашиваю изображение из OpenStreetMap через сервисного работника и сохраняю его в кеше. В кэше хранится только одно изображение. Последняя версия Chrome (версия 65.0.3325.146 (официальная сборка) (64-разрядная версия)).
Это вид кеша после обновления:
Это вид вкладки "Очистить кеш":
Итак, проблема в том, что изображение, которое имеет размер 6.4KB
на самом деле занимает 13.8MB
хранения кеша. Я что-то пропустил?
Живой пример можно увидеть по адресу https://googlechrome.github.io/samples/service-worker/basic/ - менее 10KB
скриптов занимают почти 50KB
хранения кеша.
Итак, вопрос: как получается, что когда файлы кэшируются через сервисных работников, занимаемое ими пространство значительно увеличивается? Я согласен, что фактический запрос весит больше, чем фактический ответ, но не в 10 раз больше.
Ссылки, которые могут быть полезны:
1 ответ
В случае плиток OSM высокое использование кэша происходит из-за непрозрачных запросов.
Когда вы кешируете что-то из другого домена, вам разрешено только кешировать это и никак не видеть содержимое. Это делает запрос непрозрачным. Вы не можете возиться с содержанием в вашем коде, только кешировать его, это черный ящик. Во избежание утечки информации браузеры реализуют заполнение при кэшировании ресурса. По этой причине сообщается, что изображение размером 100 КБ занимает 7 МБ вашего кэша, а фактический размер сообщения отличается от браузера к браузеру.
Это только означает, что вы сможете кэшировать намного меньше непрозрачных запросов в логике программного обеспечения до того, как будет сгенерировано исключение превышения квоты. Все кэшированные запросы - даже если они на самом деле очень маленькие - занимают много (заполненного) пространства в кэше, чтобы избежать утечки информации.
Во втором случае я думаю, что это ошибка.