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

【Webpack】实现持久化缓存

回答重点

在 Webpack 中实现持久化缓存有几个关键策略,最核心的就是利用文件内容哈希,使得文件名发生变化,这样浏览器就会识别为新的资源而不是使用缓存的旧资源。具体步骤如下:

1)使用 output.filenameoutput.chunkFilename 配置项来添加哈希:

output: {
  filename: '[name].[contenthash].js',
  chunkFilename: '[name].[contenthash].js',
}

2)使用合适的插件来优化缓存,例如 HtmlWebpackPlugin 生成带有哈希的文件引用,以及 MiniCssExtractPlugin 用于 CSS 文件名哈希:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

plugins: [
  new HtmlWebpackPlugin({
    template: './src/index.html',
  }),
  new MiniCssExtractPlugin({
    filename: '[name].[contenthash].css',
  }),
]

3)开启长效缓存管理:使用 webpack.NamedModulesPluginwebpack.HashedModuleIdsPlugin,确保模块id在内容不变的情况下保持一致:

optimization: {
  moduleIds: 'hashed',
}
plugins: [
  new webpack.HashedModuleIdsPlugin(),
]

4)分离供应商代码(第三方库)和应用代码,利用 SplitChunksPlugin

optimization: {
  splitChunks: {
    chunks: 'all',
  },
}

扩展知识

在实现持久化缓存方面,我们可以进一步优化和理解一些概念和工具:

1)Contenthash 与 Chunkhash:了解 contenthashchunkhash 的区别至关重要。contenthash 是基于文件内容生成的哈希,任何内容改变都会导致哈希变化。而 chunkhash 则是基于整个 chunk 的内容进行哈希计算。

2)缓存优化策略

  • 浏览器缓存:配置 HTTP 头,如 Cache-ControlETag,使得浏览器缓存策略与文件名哈希结合,进一步提升缓存效率。
  • Service Worker:利用 Service Worker 缓存策略,通过 Workbox 等工具实现更细粒度的缓存控制。

3)Tree Shaking 和 Dead Code Elimination

  • 使用 mode: 'production'TerserWebpackPlugin 来启用 Tree Shaking 和去除无用代码,减少最终产出文件体积。

4)Differential Loading:针对不同的浏览器特性生成不同的构建版本 (现代浏览器和旧版浏览器),利用 @babel/preset-envtargets 选项和 Webpack 的 environment 目标进行指导。

5)Monitor Cache Performance:使用工具如 Lighthouse 来分析和评估缓存性能,从具体的报告中找出改进点。


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

相关文章:

  • stm32下的ADC转换(江科协 HAL版)
  • el-table中增加校验方法(二)
  • django解决跨域问题
  • C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中
  • 从零入门激光SLAM(二十三)——direct_visual_lidar_calibration全型号激光雷达-相机标定包
  • RT-Thread 星火1号学习笔记
  • 两台虚拟机之分布式部署
  • 如何理解MVCC
  • .net 之内存回收
  • 阿里云服务器发布node服务后,连接不上
  • 简单分享下Python的if
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 4 获取Push Token
  • 科研绘图系列:R语言连线点图(linechart dotplot)
  • 浅析安科瑞Acrel-1000DP分布式光伏监控系统在某煤矿5MW分布式光伏项目中的应用-安科瑞 蒋静
  • [mongodb][配置]MongoDB中限制内存
  • Ceph官方文档_02_Ceph初学者指南
  • 功能测试详解
  • npm run serve报错提示js堆内存不足
  • elastic search后端安装方法(服务端)
  • DCGAN生成人脸图片
  • g1:基于 Llama,用提示工程实现类似 o1 的深度推理
  • SpringBoot 与 Maven 快速上手指南
  • 使用Fiddler Classic抓包工具批量下载音频资料
  • 从HarmonyOS Next导出手机照片
  • 使用python-pptx批量删除备注:清除PPT文档中的所有备注信息
  • 开源集成开发环境搭建之VSCode启动Jupyter Notebook