第九章、优化器

优化器的作用是在AST中找出静态子树并打上标记,有以下两个好处:

  1. 每次重新渲染时,不需要为静态子树创建新节点
  2. 在虚拟DOM中打补丁的过程可以跳过

优化器的内部实现主要分为两个步骤:

  1. 在AST中找出所有静态节点并打上标记
  2. 在AST中找出所有静态根节点并打上标记

通过递归的方式从上向下标记静态节点时,如果一个节点被标记为静态节点,但它的子节点却被标记为动态节点,就说明该节点不是静态节点,可以将它改为动态节点。
静态节点的特征是它的子节点必须是静态节点。

标记完静态节点之后需要标记静态根节点,其标记方式也是使用递归的方式从上向下寻找,在寻找的过程中遇到的第一个静态节点就为静态根节点,同时不再继续向下找。
有两种特殊的情况:

  1. 如果一个静态根节点的子节点只有一个文本节点,那么不会将它标记为静态根节点,即便它也属于静态根节点;
  2. 如果找到的静态根节点是一个没有子节点的静态节点,那么也不会将它标记为静态根节点。

以上两种情况的原因是优化成本大于收益

以上过程的相关代码此处不再展示。

发布了260 篇原创文章 · 获赞 24 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/LiyangBai/article/details/104380112