Лимит файлов в firefox с работником службы? - PullRequest
0 голосов
/ 17 апреля 2020

Я надеюсь, что кто-то может помочь мне с этим.

На этапе установки моего сервисного работника я пытаюсь кэшировать 100 файлов, но Firefox кэширует только 50 или 60 из них, разные при каждой установке работник сервиса.

При мониторинге кеширования я не получаю ошибок, но после завершения установки половина файлов просто не находится в кеше. Это с Firefox 75 на MacOS Catalina и Windows 10. Все это прекрасно работает в Safari, Edge, Chrome.

Кэшированные мной тестовые файлы имеют размер 3 КБ каждый и используют «хранилище». и "оценить", я вижу, что есть достаточно свободного места.

Вот мой код работника службы. Я пытался сделать это с помощью cache.addAll и forEach для мониторинга кэширования, но результат тот же: отсутствует около половины файлов.

    const CACHE_NAME = 'limit-test-cache-v1';
    const urlsToCache = [
        '/serviceworker-limit/testdata/testdata1.pdf',
        '/serviceworker-limit/testdata/testdata2.pdf',
        '/serviceworker-limit/testdata/testdata3.pdf',
        '/serviceworker-limit/testdata/testdata4.pdf',
    ...
        '/serviceworker-limit/testdata/testdata97.pdf',
        '/serviceworker-limit/testdata/testdata98.pdf',
        '/serviceworker-limit/testdata/testdata99.pdf',
        '/serviceworker-limit/testdata/testdata100.pdf'
    ];
    const cacheSize = urlsToCache.length;
    let counter = 0;

    self.addEventListener('install', event => {
        event.waitUntil(

            /*
            caches.open(CACHE_NAME).then(cache => {
                cache.addAll(urlsToCache);
            })
            */


            caches.open(CACHE_NAME).then(cache => {
                console.log('Opened cache');
                urlsToCache.forEach(url => {
                    const req = new Request(url);
                    cache.add(req).then(() => {
                        counter++;
                        console.log(url + ' has been cached. Message ' + counter + ' of total: ' + cacheSize);
                    }).catch(err => {
                        counter++;
                        console.log('Error while caching' + url + '. Error ' + err);
                    });
                });
            })


        );
    });

Поскольку ошибок нет, я в принципе не знаю, что искать. Это ожидаемое поведение как-то? Мой код неверен? Это ошибка Firefox? В конце концов, правильные ли заземлители? Если кто-нибудь может дать мне несколько советов, это будет оценено.

1 Ответ

0 голосов
/ 21 апреля 2020

В случае, если кто-то заинтересован или сталкивается с идентичной проблемой, эта проблема была вызвана сочетанием двух проблем:

  1. Я проверил размер кэша сразу после того, как состояние работников службы изменилось с активации «активирован». Как указано в MDN (см. Первое примечание), это может быть слишком рано, поскольку тело содержимого извлеченных файлов может по-прежнему работать в потоковом режиме и кэш еще не будет готов. Я ожидал бы, что размер кэша будет учитывать количество записей в базе данных, но, по-видимому, это не так.
  2. Представление хранения кэша в Firefox 'инструментах dev показывает только ограниченное количество кэшированных файлов. Примечание типа «только первые 60 кэшированных файлов отображаются здесь» помогло бы предотвратить неправильное понимание ситуации, но в конечном итоге здесь должна быть какая-то нумерация страниц. Возможно проблема решена в Прикладной панели устройства devEdition Firefox.
...