当前位置: 首页 > article >正文

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
这里的urlPattern可以是链接也可以是正则匹配的规则路径等等

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

来看看结果

 

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


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


http://www.kler.cn/a/388362.html

相关文章:

  • MacOS安装Xcode(非App Store)
  • fisco-bcos系统架构
  • 基础8:可调用对象类型
  • TP5 动态渲染多个Layui表格并批量打印所有表格
  • 校史馆云展厅适合远程教学吗?
  • AES 与 SM4 加密算法:深度解析与对比
  • Library:Day-02
  • qt QPixmapCache详解
  • 解决 Vue3、Vite 和 TypeScript 开发环境下跨域的问题,实现前后端数据传递
  • b4tman / docker-squid 可快速安装运行的、容器型代理服务器 + podman
  • contos7.9 部署3节点 hadoop3.4 集群 非高可用
  • 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--访问权限中间件
  • 深度学习:NAT Decoder 详解
  • 【GPTs】EmojiAI:轻松生成趣味表情翻译
  • Java进阶嵌套循环:十.冒泡与选择算法排序
  • 命令行工具PowerShell使用体验
  • 【C++】STL中的list容器详解及常用函数用法
  • UOS启动器
  • CI/CD 实践总结
  • HTB:Explore[WriteUP]
  • [Android]查找java类中声明为native方法的具体实现方法
  • 「QT」几何数据类 之 QPolygon 多边形类
  • 增删改查基础项目总结
  • 智能机器人技术:AI 如何赋予机器智能行动
  • 如何使用 Puppeteer 和 Browserless 抓取亚马逊产品数据?
  • 【SQL实验】更新操作