Chrome показывает высокий уровень использования кеша

Я анализировал использование кеш-памяти сложного приложения, когда понял, что сохраненное изображение или скрипт с определенной длиной содержимого N на самом деле занимает 5N-10N место в кеш-хранилище.

Рассмотрим этот пример: я запрашиваю изображение из OpenStreetMap через сервисного работника и сохраняю его в кеше. В кэше хранится только одно изображение. Последняя версия Chrome (версия 65.0.3325.146 (официальная сборка) (64-разрядная версия)).

Это вид кеша после обновления: cache_storage_view

Это вид вкладки "Очистить кеш": введите описание изображения здесь

Итак, проблема в том, что изображение, которое имеет размер 6.4KB на самом деле занимает 13.8MB хранения кеша. Я что-то пропустил?

Живой пример можно увидеть по адресу https://googlechrome.github.io/samples/service-worker/basic/ - менее 10KB скриптов занимают почти 50KB хранения кеша. введите описание изображения здесь введите описание изображения здесь

Итак, вопрос: как получается, что когда файлы кэшируются через сервисных работников, занимаемое ими пространство значительно увеличивается? Я согласен, что фактический запрос весит больше, чем фактический ответ, но не в 10 раз больше.

Ссылки, которые могут быть полезны:

  1. Инструменты разработчика Chrome, показывающие высокую загрузку кеша
  2. Вопросы работника сервиса
  3. https://bugs.chromium.org/p/chromium/issues/detail?id=795134

1 ответ

Решение

В случае плиток OSM высокое использование кэша происходит из-за непрозрачных запросов.

Когда вы кешируете что-то из другого домена, вам разрешено только кешировать это и никак не видеть содержимое. Это делает запрос непрозрачным. Вы не можете возиться с содержанием в вашем коде, только кешировать его, это черный ящик. Во избежание утечки информации браузеры реализуют заполнение при кэшировании ресурса. По этой причине сообщается, что изображение размером 100 КБ занимает 7 МБ вашего кэша, а фактический размер сообщения отличается от браузера к браузеру.

Это только означает, что вы сможете кэшировать намного меньше непрозрачных запросов в логике программного обеспечения до того, как будет сгенерировано исключение превышения квоты. Все кэшированные запросы - даже если они на самом деле очень маленькие - занимают много (заполненного) пространства в кэше, чтобы избежать утечки информации.

Во втором случае я думаю, что это ошибка.

Другие вопросы по тегам