Pull to refresh

Comments 8

Жалко что поддержка SyncManager реализована только в хромо-подобных браузерах.

А есть ли аналог «AdBlock'а» для ServiceWorker'ов? Чтобы можно было блокировать все посторонние процессы и разрешить запуск только выбранных?
ага, открыл список зарегистрированных, а там только ленивый сервис-воркер не прописал

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

Поэтому, если у нас не было подключения и оно было восстановлено, SW немедленно выполнит эту задачу


Подскажите, а как эта антинаучная магия определяет статус подключения? Также как и window.navigator.onLine? Но оно же даёт не настоящие результаты. Т.е. правдиво реагирует только на галочку в dev-tools — online/offline.

Чтобы проверить эту функциональность, мы должны перейти в автономный режим в нашем браузере

Если не галочку в dev-tools клацать, а выдернуть шнур из роутера (роутер оставить включённым)? Это всё описанное в статье работать будет также?.. адекватно?

const cacheFiles = [
    'https://domain.ru/file/to/path.bin'
];

self.addEventListener('install', (event) => {
    console.log('[sw] installed8', event);
    caches
        .open('static')
        .then((cache) => cache.addAll(cacheFiles))
});

self.addEventListener('activate', (event) => {
    console.log('[sw] activated', event);
});

self.addEventListener('fetch', (event) => {
    event.respondWith(
        caches.match(event.request)
          .then(response => {
            if (response) {
                console.log('[sw] from cache', event.request, response);
              return response;
            } else {
              return fetch(event.request);
            }
          })
    );
});


Использую вот такой Service Worker.
  1. Воркер устанавливается(лог [sw] installed выполняется).
  2. Дожидаюсь пока файл загрузится (150мб). Вижу этот файл во вкладке Application -> Cache Storage.
  3. Перезапускаю страницу. Вижу что файл в кеше был найден(лог [sw] from cache выполняется). Ожидаю что файл загрузится моментально, а он грузится так же долго 30 сек.


Что я делаю не так? Спасибо.

Мимо проходил, но возможно виноват как раз console.log перед возвратом response. т.к. response'ы одноразовые, то его передача в console.log делает его возврат бесполезным. А дефолтное поведение при фейле обработки fetch'а - выполнить обычный запрос по сети.

Sign up to leave a comment.

Articles