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

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

前言


  1. 先学习vue2.x,很多2.x内容依然保留;
  2. 先学习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的信息得知当前节点要对比的具体内容。


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


<div>
  <p>标签</p>
  <p>{{msg}}</p>
</div>


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


网络异常,图片无法展示
|


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


网络异常,图片无法展示
|


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


网络异常,图片无法展示
|


  • hoistStatic(静态提升)


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


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


网络异常,图片无法展示
|


  • cacheHandlers(事件侦听器缓存)


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


未开启事件侦听器缓存


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


网络异常,图片无法展示
|


开启事件侦听器缓存


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


网络异常,图片无法展示
|


结语




相关文章
|
2月前
|
存储 缓存 JavaScript
如何优化React或Vue应用的性能
需要注意的是,性能优化是一个持续的过程,需要根据具体的应用场景和性能问题进行针对性的优化。同时,不同的项目和团队可能有不同的优化重点和方法,要结合实际情况灵活运用这些优化策略,以达到最佳的性能效果。
117 51
|
2月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
46 1
|
2月前
|
JavaScript 前端开发 算法
在性能上,React和Vue有什么区别
【10月更文挑战第23天】在性能上,React和Vue有什么区别
24 1
|
3月前
|
存储 缓存 监控
Vue.js 九个性能优化技巧
【10月更文挑战第16天】Vue.js 性能优化是一个持续的过程,需要我们不断地探索和实践。通过合理使用上述九个技巧,并结合具体的项目需求和性能指标,我们可以不断地提高 Vue.js 应用的性能和用户体验。
|
8月前
|
JavaScript 前端开发 API
Vue 3的响应式系统相比Vue 2有哪些改进?
Vue 3 响应式系统升级亮点:使用 Proxy 替换 `Object.defineProperty`,实现更细粒度的变更跟踪与高性能;自动追踪嵌套属性,无需 `$set` 或深度监听;支持懒响应式,提升初始化性能;改进数组响应式,直接使用原生数组方法;递归侦听器增强灵活性;静态属性追踪;自定义响应式容器;统一 `ref` 和 `reactive` API;引入 `toRefs` 函数;优化响应式 API,如 `markRaw`, `shallowRef` 等,大幅提升效率和开发体验。
|
8月前
|
JavaScript 算法 前端开发
面试题:vue2和vue3区别、vue3项目的打包体积为什么减少40%、vue2和vue3同样可以使用TS开发,为什么vue3就易于扩展呢?vue3的摇树优化是怎么样的优化过程?
面试题:vue2和vue3区别、vue3项目的打包体积为什么减少40%、vue2和vue3同样可以使用TS开发,为什么vue3就易于扩展呢?vue3的摇树优化是怎么样的优化过程?
223 0
|
8月前
|
API
Vue2和Vue3的区别和变化
Vue2和Vue3的区别和变化
96 0
|
8月前
|
JavaScript
【Vue2.0学习】— Vue监视数据的原理(四十二)
【Vue2.0学习】— Vue监视数据的原理(四十二)
|
JavaScript
Vue2向Vue3过度核心技术插槽1
Vue2向Vue3过度核心技术插槽1
75 0
|
C++
Vue2向Vue3过度核心技术插槽2
Vue2向Vue3过度核心技术插槽2
62 0

热门文章

最新文章