2024前端面试题-工程化篇

1.webpack(模块打包工具)五大核心

Entry入口,Output定义输出路径和命名规则,Loader模块转换器,Plugin扩展插件,Mode模式(Webpack使用相应模式的配置)

2.谈一谈你对Loader和Plugin的理解,使用过哪些?

loader:模块转换器,用于把模块原内容按照需求转换成新内容
通过使用不同的Loader,Webpack可以要把不同的文件都转成JS文件,比如CSS、ES6/7、JSX等

plugin:扩展插件
在 Webpack 构建流程中的特定时机注入扩展逻辑来改变构建结果或做你想要的事情
一个插件是含有apply方法的一个对象,通过这个方法可以参与到整个webpack打包的各个流程
IgnorePlugin
不打包匹配文件   
PrefetchPlugin
预加载的插件,提高性能

loader是用来对模块的源代码进行转换,而插件目的在于解决 loader 无法实现的其他事
因为plugin可以在任何阶段调用,能够跨Loader进一步加工Loader的输出
常用的:babel-loader(对js代码进行兼容性编译) file-loader(将webpack将所需的对象作为文件发送,并返回其公共URL.) url-loader less-loader, sass-loader

3.webpack热更新原理

Webpack的热更新,在不刷新页面的前提下,将新代码替换掉旧代码。

HRM的原理实际上是 webpack-dev-server(WDS)和浏览器之间维护了一个websocket服务。当本地资源发生变化后,webpack会先将打包生成新的模块代码放入内存中,然后WDS向浏览器推送更新,并附带上构建时的hash,让客户端和上一次资源进行对比.

4.什么是Code Splitting

Code Splitting代码分割,是一种优化技术。它允许将一个大的chunk拆分成多个小的chunk,从而实现按需加载,减少初始加载时间,并提高应用程序的性能 。

在Webpack中通过optimization.splitChunks配置项来开启代码分割

5.Webpack的Source Map是什么?如何配置生成Source Map?

Source Map是一种文件,它建立了构建后的代码与原始源代码之间的映射关系。通常在开发阶段开启,用来调试代码,帮助找到代码问题所在。

在Webpack配置文件中的devtool选项中指定devtool: 'source-map'来开启

6.如何减小打包体积

  • 按需加载:路由懒加载,动态组件按需加载
  • 代码压缩:使用uglifyjs-webpack-plugin插件压缩代码
  • 开启Tree Shaking摇树机制:optimization: {   usedExports: true,   concatenateModules: true,   minimize: true, }
  • 图片压缩:image-webpack-plugin
  • CDN引入
  • 使用Gzip压缩:在服务端(例如Nginx)配置启用Gzip
  • 移除不必要的插件和依赖
  • 代码分割(Code Splitting):将应用程序的代码划分为多个代码块,按需加载

7.webpack和vite的区别

编译方式:webpack在编译过程中,将文件打包成bundle.js文件,然后再运行这个文件
vite在开发模式下不会打包文件,他会利用浏览器的es module import属性,在需要时编译文件,在生产模式下,使用rollup打包,提供更好的tree-shaking,代码压缩和性能优化。
开发效率:webpack热更新是全量更新,修改一个文件会更新全部,会导致编译速度变慢。
vite是增量更新,只更新修改的文件,在大型应用中也可以保持较快的编译速度。
扩展性:webpack插件比vite丰富
应用场景不同:webpack适合大型复杂的项目,因为插件丰富,vite适合中小型快速开发的项目。

8.前端优化策略

  • 尽量减少http请求个数
  • 避免空的src和href
  • 使用CDN
  • 图片懒加载
  • 路由懒加载
  • 减少页面中的冗余代码
  • 杜绝404

9.为什么pnpm比npm快

  • Pnpm 使用基于内容寻址的文件系统来存储磁盘上的所有文件,这意味着它不会在磁盘中重复存储相同的依赖包,即使这些依赖包被不同的项目所依赖。这种存储方式使得Pnpm在安装依赖时能够更高效地利用磁盘空间,同时也减少了下载和安装的时间。
  • Pnpm 在下载和安装依赖时采用了并行下载的能力,这进一步提高了安装速度。
  • Pnpm 还具有一些其他特性,例如节省空间的硬链接和符号链接的使用,这些都有助于提高其性能。

10.说一下你对Monorepo的理解

Monorepo是一种将多个项目代码存储在一个仓库的代码管理方式,将不同的项目代码放在一个仓库中,优缺点如下: 优点:

  • 更好的实现代码复用,方便代码管理
  • 可以复用项目基础设施,不需要每个项目都建立一遍
  • 更好的CR
  • 子项目模块之间的关系更加透明,可以实现一次命令完成所有部署。
  • 管理依赖变得更加简单,可以在一个统一的环境中处理依赖库的版本和更新。
  • 一种开放,透明,共享的组织文化,这有利于开发者成长,代码质量的提升

缺点:

  • 代码权限管理变得很复杂
  • 项目上手学习成本高,需要了解子项目之间的依赖关系
  • 项目基础建设、依赖管理、代码搜索、分支模型等技术要求会很高
  • 所以代码放在一次,会导致项目仓库体积过大,clone等操作会变很慢

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

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

相关文章

CSS 对齐

CSS 对齐 在网页设计中,CSS(层叠样式表)对齐是一种基本而重要的技术,它决定了网页元素的位置和布局。CSS 提供了多种对齐方法,可以精确控制元素的水平、垂直对齐,以及相对于其父元素或整个页面的位置。本文…

使用python实现3D聚类图

实验记录,在做XX得分预测的实验中,做了一个基于Python的3D聚类图,水平有限,仅供参考。 一、以实现三个类别聚类为例 代码: import pandas as pd import numpy as np from sklearn.decomposition import PCA from sk…

静力水准仪的基本工作原理:解析磁致伸缩式水准仪

静力水准仪作为一种高精度的测量设备,广泛应用于桥梁、隧道、地铁、大坝、大型储罐等工程结构的沉降监测中。其中,磁致伸缩式静力水准仪以其独特的测量原理和技术优势,成为沉降监测领域的重要工具。本文将详细解析磁致伸缩式静力水准仪的基本…

el-scrollbar搭配el-backtop滚动到最顶/最底 el-scrollbar在focus时出现黑框的解决办法

如何搭配 el-scrollbar 和 el-backtop&#xff0c;使其点击后滚动到底部&#xff1a; <template><!-- 一个el-scrollbar区域&#xff0c;其ref是chatArea --><el-scrollbar scroll"(e: any) > { tempHeight e.scrollTop }" ref"chatArea&qu…

67 H3C SecPath F1000 (网络大致介绍)

一 VRF VRF&#xff08;Virtual Routing and Forwarding&#xff0c;虚拟路由和转发&#xff09;用来实现不同VPN的路由隔离。每个VRF都有相对独立的路由表和LFIB&#xff08;Label Forwarding Information Base&#xff0c;标签转发信息库&#xff09;&#xff0c;确保VPN数据…

MySQL基础:事务

&#x1f48e;所属专栏&#xff1a;MySQL &#x1f48e;1. 事务 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败 例如转账…

C++第四十弹---从零开始:模拟实现C++中的unordered_set与unordered_map

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 哈希概念 2 哈希冲突 3 哈希函数 4 哈希冲突解决 4.1 闭散列 4.1.1. 线性探测 4.1.2. 二次探测 4.2 开散列 4.2.1. 开散列概念 4.2.2…

C语言一笔画迷宫

目录 开头程序程序的流程图程序游玩的效果结尾 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <Windows.h> void printmaze(const char strmaze[11][11]) {int ia 0;…

智慧环卫与智慧城市:以人文本的创新发展之路

智慧环卫与智慧城市&#xff1a;以人文本的创新发展之路 前言智慧环卫与智慧城市 前言 智慧环卫和智慧城市的建设是当今社会发展的重要趋势&#xff0c;它们对于提升城市管理水平、改善居民生活质量具有至关重要的意义。随着国家政策对新型城市建设的大力推动&#xff0c;智慧…

python环境学习:pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。

文章目录 一、pip介绍二、pip 和 conda 的区别与联系1、包管理器的功能2、下载包的来源3、 环境管理4、 安装速度和依赖管理5、联系6、实践中的使用 三、pip创建独立环境1、存在问题并提供解决方案a、问题b、解决方案1c、解决方案2 1、创建虚拟环境流程&#xff08;easy&#x…

Three 物体(三)

点&#xff08;Points&#xff09; 一个用于显示点的类。 由WebGLRenderer渲染的点使用 gl.POINTS。 构造器 Points( geometry : Geometry, material : Material ) geometry —— &#xff08;可选&#xff09;是一个Geometry或者BufferGeometry的实例&#xff0c;默认值是…

Android13 app后台无法启动Abort background activity starts from

总纲 android13 rom 开发总纲说明 目录 1.前言 2.log分析 3.代码查找分析 4.修改方法 5.编译测试 6彩蛋 1.前言 Android13 用户app后台无法启动,提示Abort background activity starts from 10111 2.log分析 08-07 21:37:36.703: W/ActivityTaskManager(440): Back…

保护网站安全,了解常见的几种网络攻击

随着互联网技术的迅猛发展&#xff0c;网站作为信息展示和交互的重要平台&#xff0c;面临着日益复杂的网络攻击威胁。从简单的口令入侵到复杂的分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;网络攻击手段层出不穷&#xff0c;给网站所有者带来了巨大的挑战。今…

完成控制器方法获取参数-@RequestParam

文章目录 1.将方法的request和response参数封装到参数数组1.SunDispatcherServlet.java1.根据方法信息&#xff0c;返回实参列表2.具体调用 2.测试 2.封装Http请求参数到参数数组1.自定义RequestParam注解2.MonsterController.java 增加参数3.SunDispatcherServlet.java1.resol…

正则表达式备查

一、常用 符号内容\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如&#xff0c;“n”匹配字符“n”。“\n”匹配换行符。序列“\”匹配“\”&#xff0c;“(”匹配“(”。^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性&#xff0c;^ 还…

ARM工作模式

ARM ARM架构ARM七个工作模式寄存器异常向量表存储格式&#xff08;内存大小端&#xff09;汇编指令 ARM架构 RAM&#xff1a;随机访问存储器 ROM&#xff1a;只读访问存储器 AHB&#xff1a;先进高速总线 APB&#xff1a;先进外设总线 USB&#xff1a;统一串行总线 norflash&am…

Python爬虫案例二:获取虎牙主播图片(动态网站)

爬虫流程&#xff1a;优先假设是JSON数据&#xff0c;抓包方式只能翻页JSON数据HTML数据1.异步数据&#xff08;即先返回HTML&#xff0c;再返回目标的数据&#xff0c;只是触发了JSON请求&#xff09;&#xff0c;不在HTML中2.不能刷新网页&#xff0c;直接翻页 测试链接&…

基于Vue.js+Express的夕阳红养老院管理系统的设计与实现--附源码98650

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 相关技术介绍 2.1 Express框架介绍 2.2 Vue.js 2.3 MySQL数据库 2.4 Node.js主要功能 3系统分析 3.1 可行性分析 3.2 系统流程分析 3.2.1 数据新增流程 3.2.2 数据修改流程 3.2.3数据删除…

【Android】Glide模块工作原理

Glide模块工作原理 每个Glide模块包含一个Decoder&#xff0c;和一个Transcoder Decoder负责将DataSource转换为对应的Resource Transcoder负责将对应的Resource&#xff0c;转换为Drawable GlideModule示例 这里以SVG为例&#xff0c;展示下GlideModule是如何定义的 cla…

Java中等题-完全平方数(力扣)

给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 11 不是。 示…