Vue3是如何变快的?,web开发文档

Vue3通过优化diff算法,使用静态提升和事件侦听器缓存提升性能。diff算法引入静态标记减少比较,静态提升避免重复创建静态节点,事件缓存复用事件侦听器,从而提高组件更新效率。
摘要由CSDN通过智能技术生成
  1. diff算法的优化

  2. hoistStatic 静态提升

  3. cacheHandlers 事件侦听器缓存

  4. ssr渲染

1. diff方法优化

例如:下面的模板包含一个div,div内包含三个段落,其中前两个段落是静态固定不变的,而第三个段落的内容绑定的msg属性,当msg改变的时候,Vue会生成新的虚拟DOM然后和旧的进行对比。

这是段落1

这是段落2

{ {msg}}

vue2中虚拟Dom的所有节点都进行对比。

image

然而模板中div元素是固定不变的,前两个p元素也是固定不变的,可能变化的只是第3个p元素的文本,对所有元素进行对比没有必要。

vue3新增了静态标记(PatchFlag),在创建虚拟DOM的时候,如果节点会发生变化,就会加上静态标记, 然后对比的时候只比较带有Patchflag的节点。

image

Patchflag是个枚举,取值为1代表这个元素的文本是动态绑定的,取值为2代表元素的class是动态绑定的。

export const enum PatchFlags {

TEXT = 1,

CLASS = 1 << 1,

STYLE = 1 << 2,

PROPS = 1 << 3,

FULL_PROPS = 1 << 4,

HYDRATE_EVENTS = 1 << 5,

STABLE_FRAGMENT = 1 << 6,

KEYED_FRAGMENT = 1 << 7,

UNKEYED_FRAGMENT = 1 << 8,

NEED_PATCH = 1 << 9,

DYNAMIC_SLOTS = 1 << 10,

HOISTED = -1,

BAIL = -2

}

2. 静态提升

  • vue2中无论元素是否参与更新,每次都会重新创建,然后再渲染。还是以刚才点模板为例,msg每次更新都会创建前两个p节点。

import { createVNode as _createVNode,

toDisplayString as _toDisplayString,

openBlock as _openBlock,

createBlock as _createBlock } from “vue”;

export function render(_ctx, _cache,  p r o p s ,   props,  prop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值