接上一篇内容: VUE2.0 模板编译原理(一):解析器
二、优化器
优化器的作用是在AST中找到静态子树并打上标记,即那些永远不会发生变化的节点,例如纯文本节点。
打标记的作用:
-
在生成VNode的过程中,除了首次渲染,每次重新渲染,不需要为静态子树创建新节点,会直接克隆已存在的静态子树;
-
虚拟DOM的patch过程中可以跳过,因为没有比较的必要,它是不变的,节省js脚本运算成本。
实现的主要步骤:
-
在AST中找到所有静态节点并标记;
-
在AST中找到所有静态根节点并标记。
在AST中,static属性为true的就是静态节点,比如<p>啊哈哈哈</p>。
静态根节点意思是所有子节点是静态节点,父节点是动态的,那么自己就是静态根节点,staticRoot为true。
实现源码在src/compiler/optimizer.js文件中。
1、找出所有静态节点并标记

也就是markStatic(root)函数,通过isStatic(node)来判断当前节点是否为静态节点,如果type是1,说明节点是元素节点,那么循环递归改节点的子节点。type是2说明是带变量的文本节点,static将是f

本文介绍了Vue2.0模板编译的优化器部分,主要关注如何找出并标记静态节点和静态根节点。静态节点在后续渲染中会被复用,减少DOM操作;静态根节点的标记有助于跳过不必要的比较,提升性能。优化主要包括两步:一是遍历AST标记所有静态节点,二是标记静态根节点。这一过程在src/compiler/optimizer.js中实现。
最低0.47元/天 解锁文章
1072

被折叠的 条评论
为什么被折叠?



