Webpack4的缓存方案

在使用Webpack4以及之前的版本时,我们都会注意到这样的现象:

代码热更新很快
npm run start慢
npm run build慢

这种现象的本质是:Webpack4在运行时是有缓存的,只不过缓存只存在于内存中。所以,一旦Webpack的运行程序被关闭,这些缓存就丢失了。这就导致我们npm run start/build的时候根本无缓存可用。

所以,解决问题的办法就是把这些Webpack编译过程中的产生的缓存持久化到本地磁盘、数据库或者云端。这里面涉及到两点:要持久化什么,持久化到哪里。

Webpack本身就已经有一套缓存方案,只是不够完善,不支持持久化。站在现在的角度来看,我们应该直接去完善Webpack核心代码,补充上持久化缓存的功能,使用一套缓存方案解决所有问题,这是显而易见的。

然而,当时社区好像没搞清楚“要持久化什么”这个问题, 他们没有在Webpack核心代码上发力,而是选择了从外部解决。于是就出现了cache-loader、dll等技术,虽然在一定程度上解决了问题,但却引入了过多的复杂性。

Webpack5的缓存方案

实际上,“要持久化什么”这个问题从一开始就是显而易见的:是Webpack运行时存在于内存中的那些缓存,不是loader的产物,更不是dll。因此,Webpack5提供了一套持久化抽象,将数据存放在文件系统中

Webpack5直接从内部核心代码的层面,统一了持久化缓存的方案,有效降低了缓存配置的复杂性。除此之外,由于所有被webpack处理的模块都会被缓存,我们npm run start/build的二次编译速度会远超cache-loader,同时dll也可以退出历史舞台了。

Webpack4时之所以要有dll,是因为cache-loader并不能覆盖所有模块,只能对个别被loader处理的模块进行缓存。而那些通用的库是没法被cache-loader处理的,所以只能通过dll的方式来预编译。

实际上,Webpack5的内置缓存方案无论从性能上还是安全性上都要好于cache-loader。

性能上:由于所以被webpack处理的模块都会被缓存,缓存的覆盖率要高的多。

安全上:由于cache-loader使用了基于mtime的缓存验证机制,导致在CI环境中缓存经常会失效,但是Webpack5改用了基于文件内容etag的缓存验证机制,解决了这个问题。

Webpack5的缓存使用

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {mode: "development",entry: "./src/index.js",cache: {type: "filesystem", // 'memory' | 'filesystem'cacheDirectory: path.resolve(__dirname, "node_modules/.cache/webpack"), // 保存目录},output: {filename: "bundle.js",path: path.resolve(__dirname, "dist"),},devtool: false,module: {rules: [{test: /\.js$/,use: [{loader: "babel-loader",options: {presets: ["@babel/preset-react"],},},],exclude: /node_modules/,},],},devServer: {},plugins: [new HtmlWebpackPlugin({template: "./public/index.html",}),],
};

cache: true 与 cache: { type: 'memory' } 配置作用一致,表示缓存在内存中。cache.type 设置为 'filesystem' 时,表示缓存在文件系统中。

webpack文件系统缓存相关推荐

  1. Bqq服务器的缓存文件放什么目录,如何使文件系统缓存失效? - How to invalidate the file system cache? - 开发者知识库...

    30 At least on Windows 7, it seems that attempting to open a volume handle without FILE_SHARE_WRITE ...

  2. 文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别

    这两天在调优数据库性能的过程中需要降低操作系统文件Cache对数据库性能的影响,故调研了一些降低文件系统缓存大小的方法,其中一种是通过修改/proc/sys/vm/dirty_background_r ...

  3. 【Elasticsearch】将数据预加载到文件系统缓存中

    1.概述 翻译:Preloading data into the file system cache 这是一个专家设置,其细节将来可能会发生变化. 默认情况下,Elasticsearch 完全依赖操作 ...

  4. ES优化文件系统缓存filesystem cache

    1 windows如何更改 FileSystem 缓存的大小 你可以使用命令行更改文件系统缓存的大小. 此操作需要完整地重置缓存,并且它需要管理权限. 更改文件系统缓存的大小 将以下注册表值设置为0( ...

  5. 文件系统缓存,filesystem cache

    文件系统缓存 filesystem cache 许多人没有意识到.文件系统缓存对于性能的影响.Linux系统默认的设置倾向于把内存尽可能的用于文件cache,所以在一台大内存机器上,往往我们可能发现没 ...

  6. 理解内存和文件系统缓存

    理解记忆和文件系统缓存 2出4额定的帮助- 率这一主题 窗户 2000分配部分的虚拟内存系统的文件系统缓存.文件系统缓存内存子系统,保留最近使用的信息快速存取.缓存的大小取决于物理内存的安装和记忆所需 ...

  7. linux刷新dns缓存_Linux刷新文件系统缓存

    linux刷新dns缓存 We may drop the file system caches on Linux to free up memory for applications. Kernels ...

  8. elasticsearch预加载数据到文件系统缓存

    默认情况下,Elasticsearch搜索完全依赖于操作系统文件系统缓存来缓存I / O操作.可以设置index.store.preload,以便通知操作系统启动时将索引文件的内容预加载到内存中.此设 ...

  9. webpack打包缓存_【第835期】Webpack 的静态资源持久缓存

    原标题:[第835期]Webpack 的静态资源持久缓存 前言 你现在还在休假吗?早读课节前以web pack漫谈结尾,今年就以web pack开始吧.今日早读文章由众成翻译@yanni4night带 ...

最新文章

  1. Linux01-企业核心技术之逻辑卷LVM原理深入讲解35
  2. 【教程】利用libsvm-mat建立分类模型model参数解密【by faruto】
  3. word2026第十套计算机二级,计算机二级第十套练习真题
  4. 小女生的Linux技术~~~Linux常识~~21-30
  5. .net 预编译 提示中导入的类型 冲突
  6. 1+X web中级 Laravel学习笔记——blade模版
  7. java logger 格式_org.apache.log4j.Logger详解
  8. 也许,我们只需要缺憾的完美!
  9. Spring中将BeanDefinition注册到IOC容器中
  10. java毕业设计医院各科室财务管理2021Mybatis+系统+数据库+调试部署
  11. python多线程爬机票_Python 爬取携程所有机票找出最低折扣机票,让你无忧回家过年...
  12. Tomcat 支持的Java版本对照
  13. oracle中数据库的说法,下列关于Oracle数据库说法正确的是)
  14. 怎样才能在技术领域走的更远?
  15. itextpdf7 使用之 html 转 pdf 页眉页脚带图片
  16. Google Cloud的专业架构师和专业云工程师认证经验分享
  17. zigbee学习笔记---入门
  18. 英语听力软件测试培训,自学英语听力
  19. 解决SpringCloud的Gateway网关无法访问服务的静态资源
  20. 修嗒嗒不断完善建材供应链,家装行业迎来新局面

热门文章

  1. PostgreSQL 摘得 DB-Engines 2020 年度数据库
  2. 共建智慧云基石,阿里云携手英特尔走向数智未来
  3. 轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
  4. 面试官跟我扯了半小时 CountDownLatch 后,给我发 Offer?| 原力计划
  5. 数据时代如何破局?看小企业里的“大计算”
  6. 华为最强自研 NPU 问世,麒麟 810 测评远超骁龙系列!
  7. 马自达 3 为什么抛弃了触摸屏?
  8. 如何使用 Python 构建 PC 通信?
  9. 超越 Windows 时代!微软 Build 大会都透露了啥?
  10. 程序员除了编代码,还能做哪些职业规划?