JavaScript缓存之Service Worker workbox
目录
先来看看基础Service Worker
注册阶段
安装和激活
workbox
workbox-webpack-plugin
来看看结果
这次再做组件的库模式打包之后想着优化js加载,于是想到了大家用的并不是很多的Service Worker技术,这个技术类似于原生的离线包能力
先来看看基础Service Worker
注册阶段
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('/service-worker.js')
.then(registration => {
console.log(
'ServiceWorker registration successful with scope: ',
registration.scope
)
})
.catch(err => {
console.log('ServiceWorker registration failed: ', err)
})
}
来看看registration信息
需要注意的是,Service Worker
脚本除了域名为 localhost
时能运行在 http
协议下以外,只能运行 https
协议下。
注册了一个 service worker,它工作在 worker 上下文,所以没有访问 DOM 的权限。
安装和激活
const addResourcesToCache = async (resources) => {
const cache = await caches.open("v1");
await cache.addAll(resources);
};
self.addEventListener("install", (event) => {
event.waitUntil(
addResourcesToCache([
"/",
"/index.html",
"/style.css",
"/app.js",
"/image-list.js",
"/star-wars-logo.jpg",
"/gallery/bountyHunters.jpg",
"/gallery/myLittleVader.jpg",
"/gallery/snowTroopers.jpg",
]),
);
});
在安装的时候预缓存网站的静态资源
还有一些涉及service work的工作可以参考MDN文档,里面涉及的一些基本用法也有写。只是很多时候我们不会去直接使用,而是用成熟的框架来达到我们的目的!!
workbox
既然如此,我们最好是站在巨人的肩膀上,这个巨人就是谷歌。workbox 是由谷歌浏览器团队发布,用来协助创建 PWA 应用的 JavaScript
库。当然直接用 workbox
还是太复杂了,谷歌还很贴心的发布了一个 webpack
插件,能够自动生成 Service Worker
和 静态资源列表
workbox-webpack-plugin
添加 workbox-webpack-plugin 插件,然后调整 vue.config.js
文件(具体看自己工程配置):
npm install workbox-webpack-plugin --save-dev
这样就可以直接达到我们的目的
来看看结果
看起来就是和localStroage的显示形式差不多,也可以理解成一种缓存策略,只不过是运用多线程的技术,让js更优雅
如果觉得有收获,麻烦给个赞和关注。你的鼓励是我写作的动力,大家一起学习一起进步。