Vue3 编译中的优化

大佬总结,知乎转载
https://zhuanlan.zhihu.com/p/150732926

image.png

Vue3Compilerruntime 紧密合作,充分利用编译时信息,使得性能得到了极大的提升。本文的目的告诉你 Vue3Compiler 到底做了哪些优化,以及一些你可能希望知道的优化细节,在这个基础上我们试着总结出一套手写优化模式的高性能渲染函数的方法,这些知识也可以用于实现一个 Vue3jsx babel 插件中,让 jsx 也能享受优化模式的运行时收益,这里需要澄清的是,即使在非优化模式下,理论上 Vue3Diff 性能也是要优于 Vue2 的。另外本文不包括 SSR 相关优化,希望在下篇文章总结。

篇幅较大,花费了很大的精力整理,对于对 Vue3 还没有太多了解的同学阅读起来也许会吃力,不妨先收藏,以后也许会用得到。

按照惯例 TOC:

  • Block Tree 和 PatchFlags

    • 传统 Diff 算法的问题
    • Block 配合 PatchFlags 做到靶向更新
    • 节点不稳定 - Block Tree
    • v-if 的元素作为 Block
    • v-for 的元素作为 Block
    • 不稳定的 Fragment
    • 稳定的 Fragment
    • v-for 的表达式是常量
    • 多个根元素
    • 插槽出口