前端面试宝典---webpack面试题

webpack 的 tree shaking 的原理

Webpack 的 Tree Shaking 过程主要包含以下步骤:

  1. 模块依赖分析:Webpack 首先构建一个完整的模块依赖图,确定每个模块之间的依赖关系。
  2. 导出值分析:通过分析模块之间的 import 和 export,Webpack 识别出哪些导出值被其他模块引用。
  3. 未使用代码识别:通过对比模块的导出值和引用情况,Webpack 可以确定哪些代码是未被使用的"死代码"。
  4. 代码移除:最后,Webpack 会从构建包中移除这些未使用的代码,从而减小最终文件的大小。

webpack 构建流程

  1. 初始化各种参数,读取配置文件,进行解析。各种merge…,形成标准化的配置
  2. 开始编译:complier 对象初始化,注册所有的配置插件,执行run方法开始编译
  3. 从 entry 开始,读取所有的依赖树,形成 AST。不断地递归下去进行处理。
  4. 文件编译:根据文件正则匹配对应的 loader,进行文件转换
  5. 形成一个整体的资源树,完成模块的编译
  6. 输出资源:根据入口和模块的关系,组成一个个的chunk,再把每个 chunk 转换成单独的文件,准备输出。
  7. 输出完成,根据 output 配置的内容,把文件最后,写入到磁盘。
  8. webpack的hooks:中间不同时段会有不同的plugin执行

loader 和 plugin 的区别?

loader: 转换器,核心是解析.
webpack 没有 loader 的话,只能打包基础的 cjs的 js 文件,对于 css,静态资源 是无法实现打包的,这时候就需要引入 一些 loader 来进行文件的处理,更多的是,文件的转换器

plugin: 插件,主要是扩展webpack 的功能,在 webpack 的运行周期里,会有一些 hooks 对外暴露,所以在webpack 打包编译的过程中, plugin 会根据这些 hooks 执行一些自定义的操作,来实现对输出结果的干预的增强。

区别:
loader 更专注于 文件的转换,是转换器,让 webpack 处理非JS 模块plugin 更专注于 流程的扩展,是扩展器。让输出资源的能力更丰富。

webpack中hash、chunkhash和contenthash的区别

  1. hash:一整个项目,一次打包,只有一个hash值
  2. chunkhash:一个入口打包出来的文件所得到的是同一个chunkhash
    • 从入口entry出发,到它的依赖,以及依赖的依赖,依赖的依赖的依赖,等等,一直下去,所打包构成的代码块(模块的集合)叫做一个chunk,也就是说,入口文件和它的依赖的模块构成的一个代码块,被称为一个chunk。
    • 所以,一个入口对应一个chunk,多个入口,就会产生多个chunk
    • 所以,单入口文件,打包后chunkhash和hash值是不同的,但是效果是一样的
  3. contenthash:该哈希只会和文件内容有关,是控制力度最细的

如何提高 webpack 的打包速度

  • 使用多进程打包: 使用 thread-loader,happypack 等工具,将构建的流程分解为多个进程或线程去处理。esbuild,swc 相关。
  • 使用 dllPlugin 将第三方库预先进行打包,减少构建;
  • 使用 HardSourceWebpackPlugin, 缓存一些中间文件,加速后续的构建流程
  • 使用 tree shaking
  • 移除不需要的loader和不必要的插件
  • cache-loader:开启Cache-loader 实现打包缓存,对于之前读过文件进行缓存,而不需要再去读系统文件

如何减小 webpack 打包后的体积/性能优化

  1. code spliting:非首屏加载的数据,先排除掉。
  2. tree shaking:没用的,先干掉
  3. 压缩代码:css 压缩、JS 压缩
  4. 图片压缩:gzip
  5. 按需引入:例如组件库
  6. CDN加速:react,vue,比较大的第三方

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

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

相关文章

VUE3_ref和useTemplateRef获取组件实例,ref获取dom对象

旧写法 ref的字符串需要跟js中ref定义的变量名称一样 类型丢失&#xff0c;无法获取到ref定义的title类型 <template><div><h1 ref"title">Hello Vue3.5</h1></div> </template><script setup>import { ref, onMounted } …

知识图谱(KG)与大语言模型(LLM)

知识图谱&#xff08;KG&#xff09;以其结构化的知识表示和推理能力&#xff0c;为大语言模型&#xff08;LLM&#xff09;的“幻觉”、知识更新滞后和可解释性不足等问题提供了有力的解决方案。反过来&#xff0c;LLM的强大文本理解和生成能力也为KG的构建、补全、查询和应用…

MySQL数据库设计

1. 如何设计数据库 设计数据库步骤 2. E-R图的使用 我们在日常设计的数据库多为“一对多”和“多对一” 3. 设计数据库三大范式⭐ 第一范式&#xff08;1st NF&#xff09;&#xff1a;确保每列的原子性 第二范式&#xff08;2st NF&#xff09;&#xff1a;每个表只描述一件事…

C#中Action的用法

Action 是 C# 中委托的一种&#xff0c;用于封装无返回值的方法。它引用的方法不能有返回值&#xff0c;但可以有零个或多个参数。相比delegate委托&#xff0c;Action 委托的优点是不必显式定义封装无参数过程的委托&#xff0c;使代码更加简洁和易读。 1、delegate-委托 先…

计算机视觉与深度学习 | matlab实现EMD-CNN-LSTM时间序列预测(完整源码、数据、公式)

EMD-CNN-LSTM 一、完整代码实现二、核心公式说明1. **经验模态分解(EMD)**2. **1D卷积运算**3. **LSTM门控机制**4. **损失函数**三、代码结构解析四、关键参数说明五、性能优化建议六、典型输出示例以下是用MATLAB实现EMD-CNN-LSTM时间序列预测的完整方案,包含数据生成、经…

mybatis-plus实操

如何生成完全看项目&#xff0c;有的人是用管理系统生成&#xff0c;还有其他人可能是.....。博主这里是用插件生成 我是插件的话&#xff0c;先在ide连接上数据源&#xff0c;然后对表右键&#xff0c;直接来到下面这个步骤&#xff0c; 第一次是新增6个文件&#xff0c;我们…

Mergekit——任务向量合并算法Ties解析

Mergekit——高频合并算法 TIES解析 Ties背景Ties 核心思想具体流程总结 mergekit项目地址 Mergekit提供模型合并方法可以概况为三大类&#xff1a;基本线性加权、基于球面插值、基于任务向量&#xff0c;今天我们来刷下基于任务向量的ties合并方法&#xff0c;熟悉原理和代码。…

YOLOv8 在单片机上部署的缺点和应对方案

YOLOv8 在单片机上部署的主要挑战与缺陷 将 YOLOv8 部署到单片机上确实面临诸多技术挑战&#xff0c;主要源于单片机有限的计算资源与 YOLOv8 模型的高复杂度之间的矛盾。以下是具体的缺陷和限制&#xff1a; 1. 计算资源严重不足 算力限制&#xff1a;典型单片机&#xff0…

搭建一个永久免费的博客

搭建永久免费的博客&#xff08;1&#xff09;基本介绍 HugoStackGitHub GitHub GitHub GitHub Build and ship software on a single, collaborative platform GitHub 下载安装git Git - Downloads Edge插件authenticator 2fa client Settings->Password and auth…

基于SpringBoot的小型民营加油站管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

推荐一个Winform开源的UI工具包

从零学习构建一个完整的系统 推荐一个开源、免费的适合.NET WinForms 控件的套件。 项目简介 Krypton是一套开源的.Net组件&#xff0c;用于快速构建具有丰富UI交互的WinForms应用程序。 丰富的UI控件&#xff0c;提供了48个基础控件&#xff0c;如按钮、文本框、标签、下拉…

社交平台推出IP关联机制:增强用户体验与网络安全的新举措

社交平台为我们提供与亲朋好友保持联系、分享生活点滴的便捷渠道&#xff0c;还成为了信息传播、观点交流的重要平台。然而&#xff0c;随着社交平台的普及&#xff0c;网络空间中的虚假信息、恶意行为等问题也日益凸显。为了应对这些挑战&#xff0c;许多社交平台相继推出IP关…

系统架构设计(八):三层架构

什么是三层架构&#xff08;Three-Tier Architecture&#xff09; 三层架构是将系统分为三大逻辑层&#xff1a;表示层&#xff08;Presentation&#xff09;、业务逻辑层&#xff08;Business Logic&#xff09;、数据访问层&#xff08;Data Access&#xff09;&#xff0c;…

C语法备注01

&#xff08;1&#xff09;char 字符类 char 既可以是 整数 类型&#xff0c;也可以是 字符 类型。z字符 类型可以转化为对应的ASC2值。 int main(){char c;char e;c 1;char d 1;e A;printf("c %d\n", c);printf("d %d\n", d);printf("e %d\n…

CVE-2015-2183 Zeuscart SQL注入漏洞

CVE-2015-2183 Zeuscart SQL注入漏洞 主页 访问/admin/进行登录 访问&#xff1a;http://192.168.1.3/admin/?doeditcurrency&cid1 单引号测试&#xff0c;发现页面发生变化&#xff0c;进一步测试 order by 5 &#xff0c;页面正常&#xff0c;order by 6时页面发生变…

Go 语言即时通讯系统开发日志-日志day2-5:架构设计与日志封装

Go语言即时通讯系统开发日志day2 计划&#xff1a;学习go中MySQL&#xff0c;Redis的使用&#xff0c;使用MySQL和Redis完成一个单聊demo。 总结&#xff1a;现在每天下午用来开发这个项目&#xff0c;如果有课的话可能学习时间只有3-4个小时&#xff0c;再加上今天的学习效率不…

对盒模型的理解

对CSS盒模型的深入理解 CSS盒模型是网页布局的基础概念&#xff0c;它描述了HTML元素在页面中所占的空间以及如何计算这些空间。以下是关于盒模型的全面解析&#xff1a; 1. 盒模型的基本组成 每个HTML元素都被视为一个矩形的盒子&#xff0c;这个盒子由内到外由四部分组成&…

RV1126多线程获取SMARTP的GOP模式数据和普通GOP模式数据

通过代码的方式同时获取SMARTP模式的VENC码流数据和普通GOP模式的VENC码流数据&#xff0c;并进行对比画质。 一.RV1126 VI采集摄像头数据并同时编码SMARTP模式和普通GOP模式的编码码流流程 RV1126利用多线程同时获取普通GOP的VENC码流数据和SMARTP的码流数据一般如上图&#…

在Ubuntu使用 Ansible 配置 Azure 资源的动态清单

使用 Ansible 配置 Azure 资源的动态清单 简介1.安装pipx2.通过 pipx 安装 Ansible3.安装azure.azcollection4.安装集合所需的依赖项5.生成动态库存 简介 在主机变化不定的云环境中&#xff0c;Ansible 的动态清单功能可以消除维护静态清单文件的负担 本教程将带你使用 Azure…

车载诊断架构 ---车载总线对于功能寻址的处理策略

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…