Vue3.0系列——「vue3.0性能是如何变快的?」

开发 前端
本文介绍Vue3.0系列——「vue3.0性能是如何变快的?」

 

 前言

  • 先学习vue2.x,很多2.x内容依然保留;
  • 先学习TypeScript,vue3.0是用TS重写的,想知其然知其所以然必须学习TS。

为什么学习vue3.0?

  • 性能比vue2.x快1.2~2倍
  • 按需编译,体积比vue2.x更小
  • 组合API(类似React Hook)
  • 更好的TS支持
  • 暴露了自定义渲染API
  • 更先进的组件

vue3.0是如何变快的?

  • diff方法优化vue2.x中的虚拟dom是进行全量的对比。而vue3.0新增了静态标记。在与上次虚拟节点进行对比的时候,只对比带有patch flag的节点,并且可以通过flag的信息得知当前节点要对比的具体内容。

下面我们来举个例子,以下是代码片段。

  1. <div> 
  2.   <p>标签</p> 
  3.   <p>{{msg}}</p> 
  4. </div> 

vue2.x的diff算法是对虚拟dom树全量的对比。

vue3.0的diff算法在创建虚拟dom的时候,会根据dom中的内容是否发生变化,添加静态标记。只对比带有patch flag的节点。

vue3.0 diff算法优化

我们可能看上面这个图不是很明白,那我们就用另一种方式直观看下。你们可以看到下图中存在数据绑定的元素中存在静态标记1,测试网址:https://vue-next-template-explorer.netlify.app/。

静态标记

  • hoistStatic(静态提升)

vue2.x中无论元素是否参与更新,每次都会重新创建,然后再渲染。vue3.0中对于不参与更新的元素,会做静态提升,只会被创建一次,在渲染时直接复用即可。

我们再来去那个测试网站,在静态标记的选项前面打上对号,这时我们会发现不同,右边之前数据固定不变的标签,也就是这里的<p>标签</p>,被放在了render函数的外面。所以这样只会在全局创建一次,这样性能就明显提升了。

静态提升

  • cacheHandlers(事件侦听器缓存)

默认情况下,如onClick事件会被视为动态绑定,所以每次都会追踪它的变化,但是因为是同一个函数,所以不用追踪变化,直接缓存起来复用即可。好,我们来对比一下开启事件侦听器缓存前后。

未开启事件侦听器缓存

我们会看到有一个静态标记,所以每次都会追踪。

未开启

开启事件侦听器缓存

在事件侦听器缓存前打上对号,开启。我们看到没有了静态标记,就没有对比追踪了,性能就提升了。

开启

 

责任编辑:姜华 来源: 前端历劫之路
相关推荐

2022-02-06 22:13:47

VueVue3.0Vue项目

2020-08-25 09:50:35

Vue3.0命令前端

2020-09-28 15:48:37

开源技术 软件

2020-09-18 14:01:21

vue3.0

2021-04-02 10:30:18

Vue3.0前端代码

2022-05-09 13:25:27

Vue3.0前端

2019-10-30 14:31:47

Vue 3.0数组响应

2021-01-12 15:54:03

Vue开发管理系统

2022-11-28 17:21:24

2022-11-18 08:32:02

Vue3.0开源项目

2024-03-29 09:07:15

Vue3.0开源项目

2020-09-23 09:08:05

typescript

2022-02-18 09:39:51

Vue3.0Vue2.0Script Set

2022-11-30 15:33:39

Vue 3组件

2021-02-18 08:19:21

Vue自定义Vue 3.0

2021-09-28 09:30:18

uni-appVue 3.0uniCloud

2021-07-26 10:00:55

script-setuAPI前端

2023-09-27 23:08:08

Web前端Vue.jsVue3.0

2020-11-06 08:54:43

Vue 3.0函数代码

2021-02-22 21:49:33

Vue动态组件
点赞
收藏

51CTO技术栈公众号