webpack4.15.1 学习笔记(八) — 缓存(Caching)
webpack 打包模块化后的应用程序,会生成一个可部署的 /dist目录,只要 /dist 目录中的内容部署到 server 上,client(通常是浏览器)就能够访问此 server 的网站及其资源。而最后一步获取资源是比较耗费时间的,这就是为什么浏览器使用一种名为 缓存 的技术。
通过命中缓存,降低网络流量,使网站加载速度更快,然而,在部署新版本时不更改资源的文件名,浏览器可能会认为它没有被更新,就会使用它的缓存版本。由于缓存的存在,当需要获取新的代码时,就会显得很棘手。
通过必要的配置,以确保 webpack 打包生成的文件能够被客户端缓存,而在文件内容变化后,能够请求到新的文件。
输出文件名(Output Filenames)
通过使用 output.filename
进行文件名替换,来定义输出文件的名称,可以确保浏览器获取到修改后的文件。webpack 提供了一种可替换模板字符串的方式,通过带括号字符串来模板化文件名
。[contenthash]
将根据资产的内容创建唯一的哈希。当资产的内容发生变化时,[contenthash]
也会发生变化。
const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
index: './src/index.js',
},
plugins: [
new CleanWebpackPlugin({
cleanStaleWebpackAssets: false
}),
new HtmlWebpackPlugin({
title: 'Caching'
}),
],
output: {
filename: '[name].[chunkhash].js', // dist 目录下生成 index.8e7356e76ac80f537595.js 文件
path: path.resolve(__dirname, 'dist')
}
};
缓存第三方库
SplitChunksPlugin
可用于将模块拆分为单独的包。webpack 提供了一种优化功能,optimization.runtimeChunk
。
将第三方库如 lodash提取到单独的 vendor chunk 文件中,因为它们很少频繁修改。利用 client 的长效缓存命中来消减请求, 添加optimization.splitChunks.cacheGroups 参数并构建:
const path = require('path');
module.exports = {
entry: {
index: './src/index.js',
},
output: {
filename: '[name].[chunkhash].js',
path: path.resolve(__dirname, 'dist')
},
optimization: {
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors', // dist 目录生成 vendors.c9b22484d40ed904be57.js
chunks: 'all',
}
}
}
}
};
将 js 文件放到一个文件夹中
全部 js 文件都在 dist 根目录下,将js统一放到一个文件夹中:
module.exports = {
output: {
filename: 'js/[name].[contenthash].js', // 在前面加上路径即可
},
};
webpack4.15.1 学习笔记(八) — 缓存(Caching)的更多相关文章
- Redis学习笔记八:集群模式
作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...
- Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...
- 《Think Python》第15章学习笔记
目录 <Think Python>第15章学习笔记 15.1 程序员定义的类型(Programmer-defined types) 15.2 属性(Attributes) 15.3 矩形( ...
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
- go微服务框架kratos学习笔记八 (kratos的依赖注入)
目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...
- Java IO学习笔记八:Netty入门
作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...
- MVC缓存OutPutCache学习笔记 (二) 缓存及时化VaryByCustom
<MVC缓存OutPutCache学习笔记 (一) 参数配置> 本篇来介绍如何使用 VaryByCustom参数来实现缓存的及时化.. 根据数据改变来及时使客户端缓存过期并更新.. 首先更 ...
- ROS学习笔记八:基于Qt搭建ROS开发环境
1 前言 本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Q ...
随机推荐
- 深度学习项目-MobileNetV2水果识别模型
FruitRecognition DeepLearning深度学习小项目,利用CNN和MobileNetV2搭建的水果识别模型. github地址 fruit为本次大作业使用的数据集. geneFru ...
- c语言在Linux中的使用
gcc版本升级 如何验证gcc正常使用,编译c以及运行 过程 要验证GCC(GNU Compiler Collection)是否正常使用,您可以按照以下步骤进行操作: 检查GCC是否安装:打开终端或命 ...
- 20220314线上panic总结
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentatio ...
- ceph客户端配置自动挂载存储服务
1. 安装支持ceph的内核模块 可选: centos/ubuntu: yum install -y ceph-common 或 apt install -y ceph-common 2. 拷贝认证密 ...
- 霍夫变换原理及实现(Opencv C++)
已知一幅图像中的n个点,假设我们希望找到这些点中位于直线上的子集.一种可能的解决方法是,首先找到由每对点确定的所有直线,然后寻找靠近特定直线的那些点的所有子集.这种方法涉及寻找n(n-1)/2~n2条 ...
- LeetCode 460. LFU Cache LFU缓存 (C++/Java)
题目: Design and implement a data structure for Least Frequently Used (LFU)cache. It should support th ...
- C#.NET 使用Windows证书库中的证书
public static X509Certificate2 GetCertificate(string commonName, StoreName storeName) { X509Certific ...
- Docker PHP启用各种扩展笔记
注意 如果apt-get install命令无法安装依赖,请先执行apt update更新依赖信息 启用ZIP扩展 原作者地址:找不到了... # 安装依赖库 $ apt-get install -y ...
- 简约博客新主题Sina上线 - 魔改新浪
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 简约博客新主题Sina上线 - 魔改新浪 日期:2018- ...
- Ajax分析与爬取实战
Ajax 分析与爬取实战 准备工作 安装好 Python3 了解 Python HTTP 请求库 requests 的基本用法 了解 Ajax 基础知识和分析 Ajax 的基本方法 爬取目标 以一个示 ...