webpack(高级)--Prefetch和Preload shimming

news2024/11/22 10:06:31

webpack

Prefetch和Preload

webpack v4.6.0+ 增加了对预获取和预加载的支持
在声明import时 使用下面这些内置指令 来告知浏览器
prefetch(预获取)::将来某些导航下可能需要的资源
preload(预加载):当前导航下可能需要资源

import(/* webpackChunkName: "component" */
/* webpackPrefetch: true*/"./component")

与prefetch指令相比 preload指令有许多不同之处
preload chunk 会在父chunk加载时 以并行方式加载 prefetch chunk 会在父chunk加载结束后开始加载
preload chunk 具有中等优先级 并立即下载 prefetch chunk在浏览器闲置时下载
preload chunk 会在父chunk中立即请求 用于当下时刻 prefetch chunk会用于未来的某个时刻

CDN

CDN称之为内容分发服务器
它是通过相互连接的网络系统 利用最靠近每个用户的服务器
更快 更可靠的将音乐 图片 视频 应用程序及其他文件发送给用户
来提供高性能 可扩展性及低成本的网络内容传递给用户

开发中 我们使用CDN主要是两种方式
方式一 打包所有静态资源 放到CDN服务器 用户所有资源都是荣国CDN服务器加载的
方式二 一些第三方资源放到CDN服务器上
如果所有的静态资源都想要放到CDN服务器上 我们需要购买自己的CDN服务器
目前阿里 腾讯等 都可购买
我们可以直接修改publicPath 在打包时添加上自己的CDN地址

	output: {
		clean: true,
		path: path.resolve(__dirname, "./build"),
		filename: "bundle.js",
		chunkFilename: "[id]_[name]_chunk.js",
		publicPath: "cdn地址",
	},

使用第三方库的CDN服务器
在项目中如何去引入这些CDN呢
第一 在打包的时候我们不在需要对类似于lodash或者dayjs这些库进行打包
第二 在html模板中 我们需要自己加入对应的CDN地址

排除某些包不需要进行打包
key 排除的框架名称
value 从CDN地址请求下来的js中提供对应的名称

	externals:{
		react:"React",
		axios:"axios"
	},

shimming

shimming是一个概念 是某一类功能的统称
shimming翻译过来为垫片 相当于给我们的代码填充一些垫片来处理一些问题
比如我们现在依赖一个第三方的库 这个第三方的库本身依赖lodash 但是默认没有对lodash进行导入(认为全局存在lodash)
我们就可以通过ProvidePlugin来实现shimming的效果

注意:webpack并不推荐队医的使用shimming
webpack背后的整个理念是使前端开发更加模块化
也就是说 需要编写具有封闭性的 不存在隐含依赖(比如全局变量)的彼此隔离的模块

目前我们的lodash dayjs都使用了CDN进行全局引入 所以相当于在全局是可以使用_和dayjs的
假如一个文件中我们使用了axios 但是没有对它进行引入 下面的代码会报错
在这里插入图片描述
我们可以通过使用ProvidePlugin来实现shimming的效果
ProvidePlugin能够帮助我们在每个模块中 通过一个变量来获取一个package
如果webpack看到这个模块 它将在最终的bundle中引入这个模块
另外ProvidePlugin是webpack默认的一个插件 所以不需要专门导入

	plugins: [
		new ProvidePlugin({
			axios: ["axios", "default"],
			get: ["axios", "get"],
		}),
	],

MiniCssExtractPlugin

MiniCssExtractPlugin可以帮助我们将css单独提取到一个独立的css文件中 该插件需要在webpack4+才可以使用
首先 我们需要安装mini-css-extract-plugin
npm install mini-css-extract-plugin
配置 rules和plugins

const MiniCssExtractPlugin = require("mini-css-extract");
module.exports = {
	....
	module: {
		rules: [
			{
				test: /\.css$/,
				use: [
					// "style-loader" 开发环境中,
					MiniCssExtractPlugin.loader,//生产环境
					"css-loader",
				],
			},
		],
	},
	plugins: [
		new MiniCssExtractPlugin({
			filename: "[name].css",
			chunkFilename: "[name]_chunk.css",
		}),
	],
}

Hash ContentHash ChunkHash

在我们给打包的文件进行命名的时候 会使用placeholder placeholder中有几个属性比较相似
hash chunkhash contenthash
hash本身是通过MD4的散列函数处理后 生成一个128位的hash值(32个十六进制)

hash值的生成和整个项目有关系
比如我们现在有两个入口index.js和main.js
他们分别会输出到不同的bundle文件中 并且在文件名称中我们有使用hash
这个时候 如果修改了index.js文件中的内容 那么hash会发生变化
就意味着两个文件的名称都会发生变化

chunkhash可以有效的解决上面的问题 他会根据不同的入口进行解析来生成hash值
比如我们修改了index.js 那么main.js的chunkhash是不会发生改变的

contenthash表示生成的文件hash名称 只和内容有关系
比如我们的index.js 引入了一个style.css style.css又被抽取到一个独立的css文件中
这个css文件在命名时 如果我们使用的是chunkhash
那么当index.js文件的内容发生变化时 css文件的命名也会发生变化
这个时候我们可以使用contenthash

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode详解JAVA版

目录1. 两数之和14. 最长公共前缀15. 三数之和18. 四数之和19. 删除链表的倒数第 N 个结点21. 合并两个有序链表28. 找出字符串中第一个匹配项的下标36. 有效的数独42. 接雨水43. 字符串相乘45. 跳跃游戏 II53. 最大子数组和54. 螺旋矩阵55. 跳跃游戏62. 不同路径70. 爬楼梯73.…

Jenkins连接Maven自动化部署构建SpringBoot

目录1.首先下载maven拉取到服务器2.解压maven并进入解压文件修改setting.xml2.拉取jdk18到服务器并解压3.将jdk还有maven移动到jenkins的挂载目录4.进入jenkins容器5.在jenkins的全局配置中配置jdk与maven6.jenkins安装插件 Publish Over SSH7.jenkins服务器创建一个jar包存放目…

ArcGIS API for JavaScript 4.15系列(6)——Dojo中的事件绑定

1、前言 在Web界面中,用户点击按钮、选择下拉选项、移动鼠标都涉及到dom元素的事件机制。下面就来介绍一下Dojo中的事件绑定操作。 2、dojo/on模块绑定事件 我们就从最简单的按钮click事件入手,Dojo中的dojo/on模块可以实现dom元素的事件绑定&#xf…

高性能办公娱乐迷你主机——Maxtang大唐AMD5600U

今天给大家介绍一款AMD5600U迷你主机,说起这款处理器大家应该并不陌生,像联想小新、YOGA以及ThinkBook等很多款用的都是这个型号,不过笔记本的价格基本都在3999-4999这个价位区间,同样的处理器,笔记本卖那么贵&#xf…

内网渗透(二十八)之Windows协议认证和密码抓取-Windows RDP凭证的抓取和密码破解

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

帮公司面试了一个30岁培训班出来的程序员,没啥工作经验...

首先,我说一句:培训出来的,优秀学员大有人在,我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配,是非常遗憾的事情。 最近,在网上看到这样一个留言,引发了程序员这个圈子不少的…

Python程序设计-第5章Python面向对象

第5章Python面向对象一.预习笔记 1.类的相关概念 类的定义,类对象,实例对象,类属性 类属性是跟类绑定的,如果要修改类的属性就必须使用类对象访问,只使用实例对象是无法修改的。 权限访问:name与age是公…

【每日随笔】手指训练 ( 产品需求探索、技术无关 | 手指训练作用 | 哪些人需要手指训练 | 手指操 | 手指康复训练器材 )

文章目录一、手指训练作用二、哪些人需要手指训练三、手指操四、手指康复训练器材产品需求探索 , 研究下手指训练的市场 , 前景 , 是否可以开发 ; 一、手指训练作用 手指训练作用 : 改善 上肢协调性手眼 协调性训练提高 手指 抓握 能力提高 手指 灵活性提高 上肢运动 准确性 和…

Linux进程间通信(system V共享内存)

共享内存原理 看上面这张图,其实只要是进程间通信都离不开让他们看到同一块资源(内存),其实共享内存这里和动态库那里一样,都是要加载到共享区,共享内存提供者,是操作系统,操作系统要不要管理共享内存&…

Python环境搭建指南

Python能做太多有趣使用的事了,不仅可以做现在火热的人工智能、数据分析,还可以做爬虫、Web开发、自动化运维的事情。 随着Python为我们工作与生活带来更多的便捷后,很多人开始学习Python,关注Python的发展前景、薪资和职业素养的…

RabbitMQ——高级特性(SpringBoot实现)

本篇文章的内容与我之前如下这篇文章一样,只是使用技术不同,本篇文章使用SpringBoot实现RabbitMQ的高级特性! RabbitMQ——高级特性_小曹爱编程!的博客-CSDN博客RabbitMQ——高级特性:1、RabbitMQ高级特性;…

IDEA2021.3新建一个maven-archetype-webapp项目,发现在新建文件汇总,没有新建servlet文件选项

问题 我使用maven-webapp 模板新建了一个web项目&#xff0c;但是在新建文件的时候&#xff0c;发现没有servlet选项 解决 第一种&#xff1a;在pom中直接配置 <dependencies><dependency><groupId>javax.servlet</groupId><artifactId>java…

Linux进程信号产生以及捕捉

一.什么是信号 生活中&#xff0c;有哪些信号相关的场景呢&#xff0c;比如&#xff1a;红绿灯&#xff0c;闹钟&#xff0c;转向灯等等 1.这里我们要知道&#xff0c;你为什么认识这些信号呢&#xff0c;记住了对应场景下的信号&#xff0b;后续是有”动作“要你执行的 2.我们…

spring boot 项目打包镜像方式以及区分环境打包

springboot项目打包成docker镜像-贾玉珍-2023年2月8日方法一&#xff1a;将项目jar包手动推送到docker服务器上1.用maven对项目进行打包&#xff0c;打包成功后会有一个target目录&#xff0c;目录下有打好的项目jar包2.将jar包上传到服务器上&#xff0c;我用的是finalshell工…

Zabbix Agent item监控项讲解

前言 agent与snmp是Zabbix两种重要的监控方式&#xff0c;这一期主要介绍Zabbix Agent item监控项。。Zabbix agent分为主动代理、被动代理&#xff0c;配置item类型时&#xff0c;可以选择需要的类型&#xff1a; Zabbix agent &#xff1a;用于被动检查 Zabbix agent&…

【C语言进阶】结构体、位段、枚举和联合

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;C语言航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&a…

顶刊MS论文解读|数据驱动的动态定价和订购策略

作者&#xff1a;白静 金凯瑞 马玺渊 钟子俊编者按 本次解读的文章为“Data-Driven Dynamic Pricing and Ordering with Perishable Inventory in a Changing Environment”&#xff0c;于2022年发表在期刊 Management Science, 作者 N. Bora Keskin, Yuexing Li, Jing-Sheng …

推荐5款极大提高工作效率的办公软件!每个都是我精挑细选的

关于提高办公效率的相关软件&#xff0c;答主要把工作5年的独家秘方都拿出来了。分享的都是用过的且体验不错的软件&#xff0c;大多数是免费软件&#xff01; 按照使用场景&#xff0c;简单先分个类&#xff0c;分别是时间利用利器&#xff0c;流程优化软件&#xff0c;办公美…

论文投稿指南——中文核心期刊推荐(工程材料学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

重生之我是赏金猎人-SRC漏洞挖掘(一)-某SRC测试系统无脑Getshell

0x01 前言 https://github.com/J0o1ey/BountyHunterInChina 欢迎大佬们点个star 0x02 资产收集到脆弱系统 在某src挖掘过程中&#xff0c;本人通过ssl证书对域名资产进行了收集&#xff0c;通过计算域名对应ip段的权重 整理出其C段资产&#xff0c;进行了批量目录扫描 查看…