TEXT = 1 //
动态文本节点
CLASS=1<<1,1 // 2//
动态
class
STYLE=1<<2,// 4 //
动态
style
PROPS=1<<3,// 8 //
动态属性,但不包含类名和样式
FULLPR0PS=1<<4,// 16 //
具有动态
key
属性,当
key
改变时,需要进行完整的
diff
比较。
HYDRATE_ EVENTS = 1 << 5,// 32 //
带有监听事件的节点
STABLE FRAGMENT = 1 << 6, // 64 //
一个不会改变子节点顺序的
fragment
KEYED_ FRAGMENT = 1 << 7, // 128 //
带有
key
属性的
fragment
或部分子字节有
key
UNKEYED FRAGMENT = 1<< 8, // 256 //
子节点没有
key
的
fragment
NEED PATCH = 1 << 9, // 512 //
一个节点只会进行非
props
比较
DYNAMIC_SLOTS = 1 << 10 // 1024 //
动态
slot
HOISTED = -1 //
静态节点
//
指示在
diff
算法中退出优化模式
BALL = -2
2. hoistStatic 静态提升
� Vue 2x : 无论元素是否参与更新,每次都会重新创建。
� Vue 3x : 对不参与更新的元素,会做静态提升,只会被创建一次,之后会在每次渲
染时候被不停的复用。这样就免去了重复的创建节点,大型应用会受益于这个改动,免去了
重复的创建操作,优化了运行时候的内存占用
<p>HelloWorld</p>
<p>HelloWorld</p>
<p>{ message }</p>
开启静态提升前
export function render(_ctx, _cache, $props, $setup, $data, $options) {
return (
_openBlock(),
_createBlock("div", null, [
_createVNode("p", null, "'HelloWorld'"),
_createVNode("p", null, "'HelloWorld'"),
_createVNode("p", null, _toDisplayString(_ctx.msg), 1 /* TEXT */),
])
);
}
开启静态提升后编译结果
const _hoisted_1 = /*#__PURE__*/ _createVNode(
"p",
null,
"'HelloWorld'",
-1 /* HOISTED */
);
评论0