Vite 为什么快

冷启动:基于原生 ES Modules,无需打包

1. 传统工具的问题:

  1. 像 Webpack 等传统工具,需要在启动时将所有模块都解析、构建并打包成一个或多个文件,甚至还要处理代码分割、依赖图生成等耗时任务。
  2. 随着项目规模的增大,冷启动时间成倍增加。

Vite 的优势:

  1. 直接使用原生 ES Modules:Vite 不再打包项目的所有模块,而是直接提供模块化代码,浏览器按需加载所需模块。
  2. 浏览器在加载入口文件时(如 index.html),会根据

2. 预打包优化:esbuild 的高效依赖处理

  1. 现代前端项目中,第三方依赖往往是性能瓶颈;
  2. 依赖数量庞大
  3. 部分依赖以 CommonJS 模块形式存在,需要转为 ES Modules

Vite 的解决方案

  1. 使用 esbuild 预打包依赖;
  2. Vite 启动时会将依赖库(如 react、lodash)进行预编译;
  3. esbuild 是用 Go 编写的构建工具,其速度比基于 JavaScript 的工具快 10-100 倍。

结果

提前优化常用依赖,避免开发阶段每次都重新解析这些库。

3.按需加载模块:避免全量构建

传统工具的问题:

Webpack 等工具必须在开发时解析整个模块依赖图,并在初始阶段构建所有模块,无论它们是否会被立即使用。

Vite 的优化:

  1. 当浏览器通过 import 请求某模块时,Vite 才会动态编译和发送这个模块。
  2. 未使用的代码模块不会被解析或编译,节省大量时间。
  3. 开发时修改某个文件,Vite 只重新编译该文件和其相关模块。

更快的 HMR(热模块替换)

传统工具的问题:

Webpack 等工具在代码变化时,会触发整个模块树的重新打包,即使只修改了很小的一部分代码。

Vite 的优化:

  1. 使用原生 ES Modules,HMR 仅重新加载被修改的模块,而不是整个模块树。
  2. 浏览器只需重新请求改动的模块,并自动更新页面中的变化部分。

结果:

热更新时间以毫秒计算,开发体验更加流畅

CSS 的高效处理

传统工具的方式:

Webpack 等工具需要将 CSS 与 JavaScript 一起打包处理,修改样式文件时,可能重新触发整个构建流程。

Vite 的方式:

  1. 独立的 CSS 热更新;
  2. 修改 CSS 文件时,Vite 不会重新编译整个模块链。
  3. 直接将更新后的 CSS 注入到页面中,速度更快。
  4. 开发阶段只加载当前模块相关的 CSS,减少不必要的资源处理。

构建阶段:Rollup 优化生产环境代码

传统工具的问题:

Webpack 处理生产构建时,可能面临复杂的配置和额外的性能开销(如 tree-shaking 和代码分割)。

Vite 的优化:

  1. Vite 使用 Rollup 作为生产环境的打包工具,提供高度优化的生产代码。
  2. 支持高效的 tree-shaking、代码分割和压缩。
  3. 生成的代码默认面向支持 ES2015+ 的现代浏览器,减少冗余 polyfills。

总结 :

优化点Vite 的做法对比传统工具的改进
冷启动基于 ES Modules,按需编译无需全量打包,启动速度极快
依赖预打包使用 esbuild 高速预处理依赖提前优化依赖,减少后续解析开销
模块按需加载浏览器请求时才加载和编译模块避免不必要的全量构建
热模块替换(HMR)仅更新修改的模块,利用模块化架构HMR 更高效,无需重启服务
CSS 热更新独立处理 CSS 文件,直接注入更新更快响应样式改动
构建优化使用 Rollup 构建,针对现代浏览器生成高效代码构建时间短,生成的代码体积小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值