Vue又更新了,性能大幅提升!

11 月 25 日,Vue 发布了 3.3.9 版本,该版本除了解决了一些 Bug 之外,最重要的是对编译器性能进行了优化,使得编译速度大幅提升,下面就来详细看一下吧!

成都创新互联公司专注于江宁企业网站建设,响应式网站,商城网站定制开发。江宁网站建设公司,为江宁等地区提供建站服务。全流程按需网站开发,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务

编译器性能优化

SFC 编译速度整体提高 44%

基于使用 Elk 存储库中的所有 SFC 文件完成的基准测试,这应该在很大程度上代表了现实世界的应用:

benching with:
- 225 files
- isProd: true
- sourceMap: true
- 3 warmup runs
- 10 bench runs

old compiler: 1513ms
new compiler: 845ms
new compiler is 44.15% faster.

---

benching with:
- 225 files
- isProd: true
- sourceMap: true
- 5 warmup runs
- 20 bench runs

old compiler: 2872ms
new compiler: 1618ms
new compiler is 43.66% faster.

注意:此基准测试仅测量@vue/compiler-sfc解析 SFC 文件并将其转换为JavaScript和 source map 所花费的时间。它不包括 CSS 处理、JavaScript打包和代码压缩。因此,对整个项目构建时间的影响可能不会那么显著,但仍然可以注意到。

解析速度提高 100%

解析器完全重写,速度提高了100%。也就是说,与旧解析器相比,解析相同的模板它仅需要一半的时间。

旧解析器是一个递归下降解析器,使用了大量的正则表达式和低效的前瞻搜索。

新解析器使用了从htmlparser2 fork 出来的有限状态机标记器。它以线性方式迭代处理输入,具有最小的前瞻和回溯,并且在很大程度上减少了对正则表达式的依赖。

代码生成速度提高 40%

优化了行/列计算

以前,每次调用CodegenContext.push都涉及迭代已推入的字符串,以检查换行符,以记录用于 source map 生成的正确行和列位置。分析表明,这个迭代在advancePositionWithMutation()中进行,导致了非常大的开销。在本次优化中,如果预先知道换行符的存在或位置,则可以跳过字符串迭代。

优化了 source map 生成

SourceMapGenerator.addMapping花费了大量时间来规范化和验证输入参数。考虑到我们知道提供的是确切参数,可以通过直接添加映射来避免这个开销。

消除SFC模板的双重解析和 source map 开销

与普通的Vue模板相比,SFC解析具有一些不同的要求:除