301 - 《Node 性能优化》
发布于 2023年5月18日
Vite 4.3 在启动时间和 HMR 方面都有长足的提升,冷启动提升 400%+,HMR 提升 70%,具体见参考 How we made Vite 4.3 faaaaster 🚀 | sun0day’s blog - lost in code 这篇文章。本文会先分析 Vite 4.3 做了啥,然后聊下我对 Node 性能提升部分的看法。
Vite 4.3 的性能提升都做了啥?
1、不用 resolve 库,改成自己实现,更简单、严格、准确,同时利用缓存。这是大头,应该占了提升了 80%?
2、用 fs.realpathSync.native 代替 fs.realpathSync,后者慢 70 倍
3、阻塞式改非阻塞式,比如 fs.readFileSync 改成 fs.readFile,这样不会阻塞主线程
4、HMR 更新缓存,比如 A>B>C 和 A>B>D 两个依赖链,A 编辑更新后会同事更新两个依赖链,此时 A 和 B 需要被处理两遍,再加 cache 或 debounce 之后就只需处理一遍了,这对于 git checkout 的场景的提升尤其有效
5、并行,比如用 Promise.all 代替 for 循环
6、=== 相比 startsWith 和 endsWith 快 20% 到 60%
7、避免重复创建正则表达式
我的感受是。1)前四个优化是需要的,后 3 个感觉有点「过度优化」,为了小优化把代码改地复杂可能会提高维护成本,最后反而得不偿失,2)resolve 确实是很多构建工具优化到极致之后的的性能问题关键所在,3)如果要进一步优化