【Webpack】使用 Webpack 和 LocalStorage 实现静态资源的离线缓存

ops/2024/9/25 10:51:06/

基本流程

1)使用 Webpack 进行资源打包:

  • 安装 Webpack 及其相关插件。
  • 配置 Webpack,将静态资源打包到特定目录。

2)配置 Service Worker:

  • 安装 workbox-webpack-plugin 插件。
  • 配置 Service Worker,通过 Workbox 生成离线缓存资源列表。

3)使用 LocalStorage 缓存

  • 在代码中监听资源加载事件。
  • 加载成功后,将资源存储到 LocalStorage。

4)离线加载资源:

  • 在页面加载时,优先从 LocalStorage 中读取资源。
  • 资源不存在时,从网络请求并更新到 LocalStorage。

示例代码(省略错误处理和复杂情况):

// webpack.config.js example with workbox-webpack-plugin
const WorkboxPlugin = require('workbox-webpack-plugin');
module.exports = {// other settingsplugins: [new WorkboxPlugin.GenerateSW({clientsClaim: true,skipWaiting: true,}),],
};// ServiceWorker.js
self.addEventListener('install', event => {event.waitUntil(caches.open('my-cache').then(cache => {return cache.addAll(['/index.html','/main.js','/styles.css',]);}));
});self.addEventListener('fetch', event => {event.respondWith(caches.match(event.request).then(response => {return response || fetch(event.request);}));
});// Example of storing resources in LocalStorage
function cacheResource(key, url) {fetch(url).then(response => {return response.text();}).then(data => {localStorage.setItem(key, data);});
}

扩展知识

优化:

1)缓存策略:

  • 网络优先:优先从网络获取最新的资源,如失败则加载缓存
  • 缓存优先:优先加载缓存资源,如缓存未命中则访问网络。

2)版本管理:

  • 每次发布新版本时,需要更新缓存中的资源,避免用户访问过期资源。可以通过添加版本号或哈希值来管理缓存

3)LocalStorage 限制:

  • LocalStorage 的存储空间有限,一般为 5MB 左右。因此,适合缓存小型静态资源或使用 IndexedDB。

4)IndexedDB 替代:

  • 缓存较大或结构化数据时,使用 IndexedDB 比 LocalStorage 更加合适,而且可以异步操作。

5)资源压缩与优化:

  • 使用 Webpack 的 file-loaderurl-loader 等插件,将图像、字体等资源压缩后再存储,从而节约缓存空间。

http://www.ppmy.cn/ops/115748.html

相关文章

GPU高性能编程CUDA入门

CMake中启用CUDA支持 最新版的 CMake(3.18 以上),只需在LANGUAGES 后面加上 CUDA 即可启用。 然后在 add executable 里直接加你的 .cu文件,和 .cpp 一样。 cmake minimum required(VERSION 3.10)set(CMAKE_CXX_STANDARD 17) set(CMAKE BUILD TYPE Rel…

spark 面试题

spark 面试题 1、spark 任务如何解决第三方依赖 比如机器学习的包,需要在本地安装?--py-files 添加 py、zip、egg 文件不需要在各个节点安装 2、spark 数据倾斜怎么解决 spark 中数据倾斜指的是 shuffle 过程中出现的数据倾斜,主要是由于…

微服务——网关登录校验(一)

1.网关登录校验 微服务中的网关登录校验是微服务架构中常见的一种安全机制,用于在请求到达微服务之前,对用户的身份进行验证,确保只有合法的用户才能访问相应的服务。 在微服务架构中,每个微服务都是独立部署的,它们之…

Linux常用命令大全

Linux系统中拥有大量的命令,这里列举一些常用的命令,覆盖了文件管理、系统监控、网络操作、用户管理。 文件和目录管理 ls:列出目录内容。 ls -l 列出当前目录下所有文件和目录的详细信息。 cd:更改当前目录。 cd /home/user 进…

文字转换(中文转英文、英文转中文)

1.环境 Python 3.10.14 2.完整代码 from transformers import pipeline, AutoModelWithLMHead, AutoTokenizermodelName "./damo/opus-mt-zh-en" # 模型名 model AutoModelWithLMHead.from_pretrained(modelName) tokenizer AutoTokenizer.from_pretrained(mo…

人工智能开发实战推荐算法应用解析

内容导读 个性化推荐思路推荐算法分类推荐效果评估 一、个性化推荐思路 推荐系统能为你提供个性化的智能服务,是基于以下事实认知:人们倾向于喜欢那些与自己喜欢的东西相似的其它物品,或倾向于与自己趣味相投的人有相似的爱好,…

基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网技术的飞速发展,企业与客户之间的沟通方式日益多样化,在线客服系统作为连接企业与客户的桥梁,其重要性不言而喻。然而,市场上现有的在线客服系统往往存在成本高、定制性差、维护复杂等问题。针对这些痛点&…

【自动化测试】Appium Server如何安装和Appium Server安装困难的原因和解决方法以及常见的一些安装失败的错误和解决方法

引言 Appium Server安装过程时常出现问题,以下是安装Appium Server过程一些原因、常见错误和解决方法 文章目录 引言一、Appium Server如何安装1.1 Node.js 安装1.2 使用NPM安装Appium1.3 验证Appium安装1.4 运行Appium Server1.5 使用Appium Desktop(可…