JavaScript缓存之Service Worker && workbox

目录

[先来看看基础Service Worker](#先来看看基础Service Worker)

注册阶段

安装和激活

workbox

workbox-webpack-plugin

来看看结果


这次再做组件的库模式打包之后想着优化js加载,于是想到了大家用的并不是很多的Service Worker技术,这个技术类似于原生的离线包能力

先来看看基础Service Worker

注册阶段
javascript 复制代码
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 的权限。

安装和激活
javascript 复制代码
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 文件(具体看自己工程配置):

javascript 复制代码
npm install workbox-webpack-plugin --save-dev

这里的urlPattern可以是链接也可以是正则匹配的规则路径等等

这样就可以直接达到我们的目的

来看看结果

看起来就是和localStroage的显示形式差不多,也可以理解成一种缓存策略,只不过是运用多线程的技术,让js更优雅


如果觉得有收获,麻烦给个赞和关注。你的鼓励是我写作的动力,大家一起学习一起进步。

相关推荐
new出一个对象1 小时前
uniapp接入BMapGL百度地图
javascript·百度·uni-app
你挚爱的强哥2 小时前
✅✅✅【Vue.js】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本
javascript·vue.js·jquery
y先森3 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy3 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189113 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿4 小时前
CSS查缺补漏(补充上一条)
前端·css
吃杠碰小鸡5 小时前
commitlint校验git提交信息
前端
天天进步20155 小时前
Vue+Springboot用Websocket实现协同编辑
vue.js·spring boot·websocket
虾球xz5 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇5 小时前
HTML常用表格与标签
前端·html