[ Vite | 青训营笔记]

61 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

Vite基本概要

浅谈构建工具

为什么需要构建工具

前端工程的痛点

前端项目由什么构成?

资源 image.png 前端工程化的问题

  • 模块化

项目拆分成多个模块,分别进行开发和维护。

  • ESM
  • CommonJS
  • UMD
  • 资源编译
    • 高级语法的编译(TS、Scss、Less等是前端的标配,但是浏览器无法识别这些语言,需要将高级语法编译成浏览器可以识别的语言。总之,浏览器的更新速度没有跟上前端的更新速度。)
  • 产物质量
    • 代码性能
    • 代码体积
  • 开发效率
    • 热更新

解决方案

  • 模块化方案, 如Webpack的runtime就是一个模块加载器,对美国
    • 提供模块加载方案
    • 兼容不同模块规范
  • 语法转译, 如Webpack中的loader
    • 高级语法转译,如Sass、TS
    • 资源加载,如图片、字体、worker
  • 产物质量
    • 产物压缩
    • 无用代码删除
    • 语法降级
  • 开发效率
    • 热更新

Vite概要介绍

组合部分

  1. No-Bundle开发服务,源文件无需打包
  2. 生产环境基于Rollup的Bundler

核心特征

  1. 高性能,dev启动速度和热更新速度非常快
  2. 简单易用,开发者体验感好

当下问题

  • 缓慢启动->项目编译等待成本高
  • 缓慢的热更新->修改代码后不能实时更新

瓶颈

  • bundle带来的性能开销
  • JS语言的性能开销

浏览器对原生ESM的支持

两大要素

  • script标签增加 type="double"属性
  • 使用ESM模块导入导出语法

基于原生ESM开发服务优势

  • 无需打包项目源码
  • 天然的按需加载
  • 可以利用文件级的浏览器缓存

基于原生Esbuild编译性能优化

  • 打包器bundle
  • 编译器transformer
  • 压缩器Minifier