vue3.0 是如何变快的
在开始介绍之前,先给大家推荐一个网站 https://vue-next-template-explorer.netlify.app。这是 Vue3 官方演示 Vdom 的示例网站,本篇文章也是基于它进行演示的。
Vue3 在
Vdom
的更新时,*只会关注它有变化的部分*。这样的优化使 Vue3 既跳出了 Vdom 的性能瓶颈,又依然保留了可以手写render function
的灵活性。相当于 Vue3 既有 react 的灵活性,又有基于模板的性能保证。——尤雨溪
diff 算法优化
我们现在来看看同样的 html,在 vue2 和 vue3 的渲染中对比出不同之处
复制代码
vue2 的本质是在对比两个树(对象)
vue3 会在创建虚拟 DOM 的时候,会根据 DOM 的内容会不会发生变化,添加一个静态标记
看完图,我们来看看 vue3 的 render 函数,会发现有变量的节点创建时会给到静态标记 (PatchFlags)去标识
复制代码
总结
从上述两张图的对比中,以及代码中,我们可以得出
复制代码
复用优化(静态提升)
静态提升(hoisStatic)
静态提升
vue2 中无论元素是否参与更新,每次都需要重新创建
vue3 对于不参与更新的元素,只会被创建一次,之后每次渲染时会不断复用
静态提升之前
复制代码
静态提升之后
复制代码
最后附上静态标记取值(PatchFlags)
复制代码
版权声明: 本文为 InfoQ 作者【乌龟哥哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/52f80a5a23b4c37d7bd240349】。文章转载请联系作者。
评论