前端工程化: vite与webpack的优缺点对比

简介: 前端工程化: vite与webpack的优缺点对比

一、前语

前端工程领域最近一年出了不少新的工具,这些新工具都运用了一些新技术或者跨领域技术,在性能上实现了一些突破,为开发者带来更快更好用的开发体验。

二、背景

在浏览器支持原生 ES 模块之前,JavaScript 并没有提供的原生机制让开发者以模块化的方式进行开发。于是Webpack、Rollup等构建式打包工具应运而生,它们极大地改善了前端开发者的开发效率。

但随着我们的应用不断迭代,我们需要处理的 JavaScript 代码量也呈指数级增长,包含数千个模块的大型项目相当普遍。

随着应用的迭代,我们开始遇到性能瓶颈 —— 使用 JavaScript 开发的工具通常需要等80s+甚至更长时间才能启动开发服务器。

启动开发服务器后即使使用了 HMR(Hot Module Replacement),文件修改后的效果也需要等待几秒钟才能在浏览器中反映出来。

如此循环往复,迟钝的反馈会极大地影响开发者的开发效率以及体验。

三、关于vite

Vite[1]是一种全新的前端构建工具。你可以把它理解为一个开箱即用的开发服务器 + 打包工具的组合,但是更轻更快。Vite 利用浏览器原生支持的 ES 模块和用编译到原生的语言开发的工具(esbuild)[2]来提供一个快速且现代的开发体验。

Vite主要具有以下特点:

  1. 快速的冷启动
  2. 即时的模块热更新
  3. 真正的按需编译

四、vite相较于webpcak的优缺点

  1. 优势
  • 快速的启动速度

Webpack 等传统的构建式打包工具,在冷启动开发服务器时,首先都会将我们的整个代码库中的源代码和node_modules进行转换、编译(Babel、PostCSS...)和打包,最终将打包好的文件推送到我们的浏览器。

vite、snowpack这类非构建式打包工具,在冷启动开发服务器时,无需分析模块依赖,也不需要编译,通过ES Module 自动向依赖的资源发出请求,因此启动速度非常快。当浏览器请求某个模块时,再根据需要对模块内容进行编译。这种按需动态编译的方式,极大的缩减了编译时间,项目越复杂、模块越多,非构建式打包工具的优势越明显。

image

  • 即时响应的热更新

在 Webpack 中,当代码某个依赖发生了改变,webpcak 会检查当前的依赖关系并重新打包,当我们的依赖关系复杂时,就算只修改一个文件,热更新的速度也会越来越慢。在实践中我们发现,即使是 HMR ,更新速度会随着应用规模的增长而显著下降。

在 Vite 中,HMR 是在原生 ESM 上执行的。当编辑一个文件时,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失效(大多数时候只需要模块本身),使 HMR 更新始终快速,无论应用的大小。同时 Vite 利用 HTTP 来加速整个页面的重新加载,对于源码模块的请求会根据 304 状态码进行协商缓存,而外部依赖模块的请求则会设置为强缓存,因此一旦被缓存它们将不需要再次请求。

image

image

Vite 与 create-react-app在 Repl.it 上启动 React 应用程序的视频比较:

video link (twitter)

  1. 缺点
  • 生态

生态这一块,Webpack 相较于 Vite 优势明显,Webpcak 的社区中有非常丰富的loader和plugin,Vite这边插件社区起步较晚,插件数量会比较少;

好在,Vite 插件开发起来非常简单。Vite 在插件设计上扩展了 Rollup 的插件接口,开发者通过阅读 Rollup 的插件文档,很快就能开发出标准的 Vite 插件了。

  • 打包构建

在构建这块,Vite 在开发服务器与产品最终构建结果没有 Webpack 一致性强。

主要原因是我们为了在生产环境获得最佳的加载性能和兼容性,还是需要将代码进行tree-shaking、懒加载和 chunk 分割(以获得更好的缓存),所以 Vite 选择了 Rollup[3] 进行产品最终构建打包。

五、vite在vue中的使用姿势

Vite 将为 Vue 提供第一优先级支持
  1. vue@2.x + vite:vue-cli-plugin-vite
  2. vue@3.x + vite: @vitejs/plugin-vue
  3. vue@3.x + JSX + vite: @vitejs/plugin-vue-jsx

六、标注

  1. vite
  2. esbuild
  3. rollup
  4. awesome-vite
  5. video link (twitter)
目录
相关文章
|
11月前
|
前端开发 JavaScript 开发工具
Vite 4.0 发布,下一代的前端工具链
【10月更文挑战第21天】Vite 4.0 的发布标志着前端开发领域的又一次重要进步。它为开发者带来了更高效、更智能、更具创新性的开发体验,正逐渐成为下一代前端工具链的引领者。
312 61
|
11月前
|
前端开发 JavaScript 开发者
工程化(webpack+vite)
在现代前端开发中,工程化是提高开发效率和项目质量的关键。UniApp 结合 Webpack 和 Vite,提供强大的工程化支持。Webpack 功能强大,支持复杂项目的构建;Vite 则利用现代浏览器的 ESM 特性,提供快速的开发体验。开发者可根据项目需求选择合适的工具,显著提升开发效率和项目质量。
|
11月前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
266 6
|
11月前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
288 7
|
11月前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
205 2
|
12月前
|
前端开发 JavaScript 开发者
工程化(webpack+vite)
工程化(webpack+vite)
|
前端开发 JavaScript
Vite 多种前端框架的构建
Vite 多种前端框架的构建
|
前端开发 JavaScript 开发者
构建工具对比:Webpack与Rollup的前端工程化实践
【10月更文挑战第11天】本文对比了前端构建工具Webpack和Rollup,探讨了它们在模块打包、资源配置、构建速度等方面的异同。通过具体示例,展示了两者的基本配置和使用方法,帮助开发者根据项目需求选择合适的工具。
272 3
|
12月前
|
资源调度 前端开发 JavaScript
Vite:新一代前端构建工具的革命性体验
【10月更文挑战第13天】Vite:新一代前端构建工具的革命性体验
|
12月前
|
前端开发 JavaScript 中间件
Vite:下一代前端构建工具的崛起
【10月更文挑战第13天】Vite:下一代前端构建工具的崛起

热门文章

最新文章

  • 1
    前端工程化演进之路:从手工作坊到AI驱动的智能化开发
  • 2
    Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • 3
    实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    34
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    93
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    47
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    134
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    112
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    66
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    35
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    67
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    79
  • 10
    Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
    155