Соревнуется ли сервисный работник за пропускную способность?

Сервисный работник устанавливает в фоновом режиме, пока страница загружается.

1) Скачивание скрипта сервис-воркера происходит параллельно с загрузкой страницы и задерживает загрузку?

2) Загружаются ли и кэшируются ли ресурсы, упомянутые в событии установки, параллельно с загрузкой страницы или после завершения события загрузки страницы.

3) Соблюдается ли при кэшировании ресурсов собственный кеш HTML или они загружаются повторно каждый раз?


person Shubham Kanodia    schedule 22.06.2016    source источник


Ответы (3)


В первый раз сервисный работник будет вызван, когда вы позвоните в регистр. Для проверок обновлений браузер делает это для каждой навигации, но ждет до завершения загрузки, чтобы избежать конкуренции со страницей.

person JaffaTheCake    schedule 25.06.2016

У сервис-воркера есть жизненный цикл, который полностью отделен от вашей веб-страницы.

  • Service worker запускается в контексте worker: поэтому он не имеет доступа к DOM и работает в потоке, отличном от основного JavaScript, на котором работает ваше приложение, поэтому он не блокирует. Он разработан как полностью асинхронный; как следствие, API, такие как синхронный XHR и localStorage, не могут использоваться внутри сервис-воркера.
  • У обслуживающего работника есть свой жизненный цикл. Обычно на этапе установки вам нужно кэшировать некоторые статические ресурсы. Если все файлы успешно кэшированы, сервис-воркер будет установлен.
  • Конечно, браузеры все время кешируют файлы. Преимущества здесь в настойчивости и контроле. Кэш браузера легко перезаписывается, в то время как кеш приложения более постоянен. Плохо настроенные серверы часто вынуждают клиента без надобности повторно загружать данные, например, провайдеры хостинга, которых вы не контролируете. Сервис-воркеры с полным API кэширования предоставляют клиенту полный контроль и могут принимать более разумные решения о том, что и когда кэшировать.
person Vivek Pratap Singh    schedule 22.06.2016
comment
Извините, если я не понял, но это не отвечает ни на одно из моих сомнений. Мой вопрос явно относится к конкурирующей полосе пропускания с текущей страницей, а не к блокировке рендеринга. - person Shubham Kanodia; 25.06.2016

1) Скачивание скрипта сервис-воркера происходит параллельно с загрузкой страницы и задерживает загрузку?

Загрузка сервис-воркера происходит, когда вы вызываете register(), и он делает это параллельно и, таким образом, не задерживает загрузку.

2) Загружаются ли и кэшируются ли ресурсы, упомянутые в событии установки, параллельно с загрузкой страницы или после завершения события загрузки страницы.

Любой сетевой запрос, исходящий от Service Worker, не блокирует ни основной поток, ни загрузку документа.

3) Соблюдается ли при кэшировании ресурсов собственный кеш HTML или они загружаются повторно каждый раз?

Запросы, исходящие от сервис-воркера, учитывают собственный кеш (https://developer.mozilla.org/en/docs/Web/HTTP/Caching_FAQ), но это поведение можно изменить с помощью свойства cache Если хочешь.

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

person Salva    schedule 27.06.2016
comment
Спасибо. Когда я сказал вмешательство в загрузку документа, я на самом деле имел в виду вмешательство в пропускную способность, а не отрисовку страницы. В любом случае, я получил ответ. - person Shubham Kanodia; 27.06.2016
comment
Если вы думаете, что я ответил на ваши вопросы, отметьте мой ответ как решение. - person Salva; 27.06.2016
comment
Означает ли это, что он также будет делать сетевой запрос на ресурсы предварительного кеширования, и мы можем иметь два вызова для одних и тех же ресурсов при загрузке первой страницы? - person Vivek Pratap Singh; 28.06.2016
comment
Ага. Первый, не перехваченный SW, а второй возник в SW. Но второй, вероятно, не достигнет сети, так как попадет в http-кеш, который находится между sw и реальной сетью. - person Salva; 30.06.2016