Почему мой сервисный работник кэширует страницы, даже если я его отключу?

Я разрабатываю статический веб-сайт francoscarpa.com, используя одиннадцать. Этот веб-сайт использует сервисного работника для предоставления пользователю автономных возможностей. Все мои страницы отображаются с помощью этого шаблона:

<!DOCTYPE html>
<html>
   <head>...</head>
   <body>
   ...
   <footer>...</footer>
   {% include "swRegistration.html" %}
   </body>
</html>

swRegistration.html имеет следующее содержание:

<script>
   if ("serviceWorker" in navigator) {
      window.addEventListener("load", function () {
         ...
         navigator.serviceWorker.register("/sw.js");
      });
   }
</script>

Это в основном позволяет мне использовать сервисного работника. Содержимое файла sw.js таково:

const CACHE_NAME = "static12";
const STATIC_FILES = [ ... ]; // the resources to cache

self.addEventListener("install", function (event) { ...  });
self.addEventListener("activate", function (event) { ... });
self.addEventListener("fetch", function (event) { ... });

Чего я не понимаю, так это почему сервис-воркер кеширует ресурсы, даже когда я отключаю строку {% include "swRegistration.html" %} из сгенерированных файлов HTML:

<html>
   <head>...</head>
   <body>
   ...
   <footer>...</footer>
   <!-- {% include "swRegistration.html" %} -->
   </body>
</html>

Если я закомментирую эту строку, правильно отображаемые HTML-страницы не отобразят ее, и когда я запускаю веб-сервер Eleventy с перезагрузкой в ​​реальном времени во время разработки, строки нет:

введите здесь описание изображения

но анализируя страницу с помощью Инспектора Firefox, я вижу, что кеш static12 все еще существует после каждого обновления страницы, даже после того, как я удалю его вручную:

введите здесь описание изображения


person Pine Code    schedule 19.07.2020    source источник


Ответы (1)


Жизненный цикл сервис-воркера не зависит от обычного кода JavaScript, выполняемого во время посещения страницы. Как только сервис-воркер зарегистрирован, он не удаляется только потому, что вы закомментировали код, который его зарегистрировал. Итак, в вашем случае сервисный работник, вероятно, уже был зарегистрирован, поэтому вы все еще видите создание кеша после комментирования кода регистрации.

Вы можете проверить, так ли это, перейдя на вкладку Приложение в Firefox DevTools и проверив, отображается ли ваш сервисный работник как зарегистрированный. В этом случае вы также должны увидеть кнопку для отмены регистрации вручную. В старых версиях Firefox (вкладка Приложение добавлена ​​недавно) вы можете вместо этого открыть about:debugging в новой вкладке, которая также покажет вам список зарегистрированных сервисных работников.

Если ваш сервис-воркер уже использовался на действующем сайте и вы хотите его удалить, вам следует добавить некоторый код в программно отменить регистрацию сервис-воркера.

person MoritzLost    schedule 30.07.2020