Почему мой сервисный работник хранит столько кеша? - PullRequest
1 голос
/ 13 марта 2019

Весь мой веб-сайт составляет ~ 3 МБ (включая изображения), однако, когда я проверяю кэш, используемый для веб-сайта на Chrome Mobile, он показывает, что используется ~ 50 МБ. Я очистил его и сбросил настройки сайта, но это все равно происходит.

Я внедрил работника сервиса, следуя рекомендациям Mozilla для кэша и обновления , и немного его отредактировал.
В основном то, что я (думаю, я) делаю, это:

  1. установить сервисный работник
  2. кэширует CACHED_URLS
  3. Когда есть запрос, он проверяет, кэшируются ли необходимые ресурсы:
    • если да, то обслуживает их из кеша
    • если нет, то обслуживает их из сети
  4. Обновляет кеш с данными сети (я знаю, этого не следует делать, если он уже обслуживался из сети на шаге 3.2)

Вот код:

importScripts('/pwa/cache-polyfill.js');

var CACHE = 'my-cache';
var CACHED_URLS = [
    '/',
    '/index.html',
    '/index.html?homescreen=1',
    '/?homescreen=1',
    '/styles/index.min.css',
    '/font/fa.css',
    '/img/favicon.png'
];


self.addEventListener('install', function(event) {
    event.waitUntil(
        caches.open(CACHE).then(function(cache) {
            return cache.addAll(CACHED_URLS);
        })
    );
});

// Mozilla - Cache and Update
self.addEventListener('fetch', function(evt) {
    console.log('The service worker is serving the asset.');

    // Cache or Fetch
    evt.respondWith(cacheOrFetch(evt.request));

    // Update Cache
    evt.waitUntil(update(evt.request));
});

function cacheOrFetch(request) {
    return caches.match(request).then(function(response) {
        return response || fetch(request);
    })
}

function update(request) {
    return caches.open(CACHE).then(function(cache) {
        return fetch(request).then(function(response) {
            return cache.put(request, response);
        });
    });
}

Итак, мой вопрос: почему он хранит 40-50 МБ в кеше, если весь сайт занимает 3 МБ?
Нужно ли очищать старый кеш?

1 Ответ

0 голосов
/ 14 марта 2019

У меня также была эта проблема с размером кеш-памяти, в моем случае я кешировал непрозрачный запрос перенаправлений для автономной работы.

Вы можете проверить, есть ли какие-либо перенаправления запроса со стороны сервера или любой запрос имеет статускод 3xx, это непрозрачные ответы / непрозрачные перенаправления, которые будут иметь слишком большой размер в кеше.

Открыть инструмент разработчика в Chrome: перейдите на вкладку «Приложения» -> «Перейти к хранилищу кэша» -> «Проверить корзину кэша»,проверьте тип ответа, возможно, будет доступен любой кэшированный ответ Opaque Redirect.

Более подробную информацию можно найти по ссылке ниже: сервисный работник получил

...