惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
A
About on SuperTechFans
G
Google Developers Blog
B
Blog RSS Feed
F
Fortinet All Blogs
WordPress大学
WordPress大学
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
Y
Y Combinator Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
Jina AI
Jina AI
IT之家
IT之家
P
Proofpoint News Feed
美团技术团队
量子位
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
B
Blog
有赞技术团队
有赞技术团队
U
Unit 42

博客园 - 饭特稠

10 年前端经验喂了狗 浪浪山老前端的2025 useAttrs 是响应式的吗(by 豆包) 实时互动教育版的自定义 UI 如何开发 2024,在路上 当蓝牙键盘连不上电脑:一次意外的debug之旅 前端技术选型时有用的网站 好用的zsh插件,打造好用的命令行 2023年终总结:怀孕,装修,还贷和其他 分享一个URL正则 使用 scriptable 实现每日诗词小组件 如何使webpack编译 node_modules 中的 npm 包 小程序中实现图片旋转后保存 Custom Elements 和 Shadow DOM了解一下? CSS 原生嵌套来了 聊聊CSS 缓动函数的新成员linear() chatgpt: 在ts中如何声明一个全局类型 cache API简介 重新学车 魔幻2022
Workbox -- 为serviceWorker量身定做的工具
饭特稠 · 2023-03-28 · via 博客园 - 饭特稠

我们知道, serviceWorker是浏览器中一个强大的特性,在PWA中实现离线浏览靠的就是它,具体而言,通过它的请求拦截和Cache API相结合,实现即使离线了,我们也可以使用PWA的一些功能。然而自己来管理这些东西还是比较繁琐和容易出错的,好在有强大的workbox。

啥是Workbox

serviceWorker确实强大,但是要用好却没有那么容易,比如用serviceWorker做缓存管理,哪些应该缓存,哪些不应该缓存,缓存应该什么时候过期,应该采用什么样的缓存策略,都是要我们考虑的问题。所以 workbox 出现了,它提供了一系列的工具,让我们以一种更加方便的方式来完成这些工作。主要有:

  • workbox-routing 用来进行路由匹配.
  • workbox-strategies 用来制定缓存策略.
  • workbox-precaching 用来预缓存.

用 serviceWorker 来进行 precache

我们先来看一张 vuepress 官网的 serviceworker 的代码:

可以看到,我们在访问 vuepress 网站时,首页加载出来之后,在 serviceWorker install事件触发后,它会将其他页面的代码也预先缓存下来,这样,当我们访问到已经被缓存的页面时,速度就会变快。通过workbox-precaching可以很容易地做到这一点:


import {precacheAndRoute} from 'workbox-precaching';

precacheAndRoute([
  {url: '/index.html', revision: '383676'},
  {url: '/styles/app.0c9a31.css', revision: null},
  {url: '/scripts/app.0d5770.js', revision: null},
  // ... other entries ...
]);

当然,这里唯一比较麻烦的是,当我们有数量比较多的资源需要预缓存时,手动去写就比较麻烦了,这时可以使用workbox-build和打包工具结合,来简化这个流程,这里举个vuepress自动生成serviceworker.js的例子

 const wbb = require('workbox-build')
  await wbb.generateSW({
    swDest: swFilePath,
    globDirectory: outDir,
    globPatterns: [
      '**/*.{js,css,html,png,jpg,jpeg,gif,svg,woff,woff2,eot,ttf,otf}'
    ],
    ...generateSWConfig
  })

swDest为生成serviceworker.js的文件路径,globDirectory表示要缓存的资源目录,globPatterns表示对哪些资源进行缓存,最终workbox-build会根据上面的参数,生成service-worker.js。

用workbox管理前端缓存

用workbox做请求代理