плагин Google Workbox Webpack для извлечения из кэша, прежде чем обслуживающий работник - PullRequest
0 голосов
/ 26 ноября 2018

Когда я просто использую предварительное кэширование из плагина Workbox, работник сервиса пытается извлечь из indexdb вместо кэша (кеш браузера).

Да, работник сервиса работает быстрее, чем сервер.Однако, если он извлекается из памяти, он занимает 0 секунд.

Я видел все стратегии из рабочего ящика, но у него нет стратегии, которая сначала пытается извлечь из памяти.

Это вседля предварительного кэширования.

new WorkboxPlugin.GenerateSW({
      skipWaiting: true,
      importWorkboxFrom: 'local',
})

service-worker.js

importScripts("/dist/workbox-v3.6.3/workbox-sw.js");
workbox.setConfig({modulePathPrefix: "/dist/workbox-v3.6.3"});

importScripts(
  "/dist/precache-manifest.4b8be844a396ff2fc7335cebbab35f10.js"
);

workbox.skipWaiting();

/**
 * The workboxSW.precacheAndRoute() method efficiently caches and responds to
 * requests for URLs in the manifest.

 */
self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.suppressWarnings();
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Просто для пояснения - Workbox отслеживает хэш файлов в indexedDB, но не использует indexedDB для обслуживания файла.Он использует API-интерфейс Cache для хранения и извлечения файлов.

В своем вопросе вы смешиваете Cache, память и работника службы с точки зрения того, откуда приходит ответ.Итак, чтобы прояснить это немного:

  1. Если у вас зарегистрирован сервисный работник для страницы (т. Е. Сервисный работник контролирует страницу), то все сетевые запросы сначала будут идти к сервисному работнику.
  2. Сервисный работник может либо получить ответ любым способом, либо он может перейти в сеть (см. Раздел ответа сервисного работника).
  3. Как только он выходит в сеть, браузер можетрешить, где он получает свой ответ (см. раздел «Ответ браузера»).

Ответ работника службы

Работник службы обычно создает один из трех способов создания ответа:

  1. Используйте ответ от API Cache для возврата.
  2. Получите ответ из сети и верните его (возможно, добавив его в кэш).
  3. Создайте пользовательский ответ, используялюбое количество источников, включая статические строки, потоки, ответы Cache API и сетевые ответы.

Обратите внимание, что в этом списке я имею в виду Cache API.Этот ответ кэшируется веб-приложением, которое хранится на компьютерах пользователей.

Ответ браузера

Для любых сетевых ответов браузер может выполнить одно из следующих действий для получения ответа:

  1. Зайдите в сеть и получите новый ответ от сервера
  2. Ссылка на кеш HTTP возвращает ответ

Кеш HTTP отделен от кешаAPI.Это вне контроля разработчиков и на него нельзя положиться.Браузер делает то, что ему кажется лучшим.

Workbox + Service Worker

Workbox предоставляет набор утилит, облегчающих работу с компонентом «Service Worker Response» и разработку для него.Это означает, что он имеет дело только с тремя типами ответов, которые я обрисовал.

Я записал, что делает предварительное кэширование рабочей коробки и как оно работает, включая то, для чего indexedDB используется в предварительном кэшировании: https://developers.google.com/web/tools/workbox/modules/workbox-precaching

0 голосов
/ 26 ноября 2018

Вы не можете контролировать, как запрос обрабатывается кешем браузера или сервером, поэтому вы, к сожалению, не можете сначала попробовать кеш браузера, затем Cache API, затем сервер.

Однако вы можете попробоватьзагружать одновременно и из Cache API, и с сервера (включая кеш браузера) и обслуживать, какой бы ни был быстрый ответ.

Это то, что Джейк Арчибальд назвал "Cache & network race" в своей автономной поваренной книге: https://jakearchibald.com/2014/offline-cookbook/#cache-network-race

...