service-worker - NetworkFirst 缓存策略不保存 url 的 html 内容
问题描述
我是第一次使用 workbox 使用 serviceworker,之前没有经验。我希望当用户访问一个 url 时,必须将相应的 html 保存到缓存中,因此当应用程序离线时,该 url 的内容从缓存中提供。但是我没有从浏览器 devtool 中看到缓存中的内容。我在这里想念什么?
import { registerRoute } from "workbox-routing";
import { precacheAndRoute } from "workbox-precaching";
import {skipWaiting} from 'workbox-core';
import {NetworkFirst, CacheFirst} from 'workbox-strategies';
// ...
function jsonResponse(value) {
return new Response(JSON.stringify(value), {
headers: { "Content-Type": "application/json" },
status: 202,
});
}
console.log("Workbox is loaded");
skipWaiting();
/* injection point for manifest files. */
precacheAndRoute(self.__WB_MANIFEST);
const pagesCache = new NetworkFirst({
cacheName: 'pages-cache',
});
registerRoute(
new RegExp("/projects/[-a-z0-9]+/edit$"),
args => {
console.log('Got in here..');
return pagesCache.handle(args);
}
);
所以当我离线时,我看到了。
解决方案
您的代码混合了 Workbox 库中的预缓存和运行时缓存部分。它的某些部分可能有效,有些则无效。
通过说“我希望当用户访问一个 url 时,必须将相应的 html 保存到缓存中,因此当应用程序离线时,该 url 的内容从缓存中提供。” 看来您想要所谓的网络优先缓存策略。使用 Workbox 的最简单配置是:
import {registerRoute} from 'workbox-routing';
import {NetworkFirst} from 'workbox-strategies';
registerRoute(
new RegExp('/'),
new NetworkFirst()
);
我还建议您阅读有关 Service Worker 本身的入门读物。您可能会找到一个,例如。这里https://developers.google.com/web/fundamentals/primers/service-workers/
推荐阅读
- c# - Looping through JSON array and adding items to list C#
- c# - I generated barcode image to picture box and then wrote to printing. Is there any method to write generated image directly to print document?
- favorites - send id product to Favorite list in database
- javascript - How do i loop through for each guild member in database (quick.db)
- modbus - Representing Modbus data using Timeseries
- reactjs - 测试嵌套的异步调用反应组件
- c# - Tizen Watch 应用程序中的非确定性错误
- url - IIS URL 重写模块 - 重定向规则不起作用
- python - 使用 Beautifulsoup 从某个属性中获取文本
- .net-core - Fortify “sourceanalyzer -show-build-ids”现在在成功构建 .NET Core 3.1 x64 后会显示任何构建 ID