首页 > 其他分享 >【 Vue 3】Vue3.0性能提升主要是通过哪几方面?

【 Vue 3】Vue3.0性能提升主要是通过哪几方面?

时间:2024-03-27 11:30:21浏览次数:26  
标签:Vue 静态 优化 节点 Vue3.0 组件 diff 哪几 监听

1. 编译阶段

回顾Vue2,我们知道每个组件实例都对应一个watcher实例,它会在组件渲染的过程中把用到的数据property记录为依赖,当依赖发生改变,触发setter,则会通知watcher ,从而使关联的组件重新渲染

<template> 
    <div id="content"> 
        <p class="text">节点 </p> 
        <p class="text">节点 </p> 
        <p class="text">{{ message }}</p> 
        <p class="text">节点 </p>
    </div>
</template>

可以看到,组件内部只有一个动态节点,剩余一堆都是静态节点,所以这里很多diff和遍历其实都是不需要的,造成性能浪费
因此,Vue3在编译阶段,做了进一步优化。主要有如下:

  • diff算法优化
  • 静态提升
  • 事件监听缓存
  • SSR优化

4.1 diff算法优化

vue3在diff算法中相比vue2增加了静态标记
关于这个静态标记,其作用是为了会发生变化的地方添加一个flag标记,下次发生变化的时候直接技该地方进行比较

4.2 静态提升

Vue3中对不参与更新的元素,会做静态提升,只会被创建一次,在渲染时直接复用
这样就免去了重复的创建节点,大型应用会受益于这个改动,免去了重复的创建操作,优化了运行时候的内存占用

4.3 事件监听缓存

默认情况下绑定事件行为会被视为动态绑定,所以每次都会去追踪它的变化
上述发现开启了缓存后,没有了静态标记。也就是说下次diff算法的时候直接使用

4.4 SSR优化

当静态内容大到一定量级时候,会用createStaticVNode方法在客户端去生成一个static node,这些静态node,会被直接innerHtml,就不需要创建对象,然后根据对象渲染

2. 源码体积

相比Vue2,Vue3整体体积变小了,除了移出一些不常用的API,再重要的是Tree shanking任何一个函数,如ref、reavtived、computed等,仅仅在用到的时候才打包,没用到的模块都被摇掉,打包的整体体积变小

3. 响应式系统

vue2中采用defineProperty来劫持整个对象,然后进行深度遍历所有属性,给每个属性添加getter和setter ,实现响应式
vue3采用proxy重写了响应式系统,因为proxy可以对整个对象进行监听,所以不需要深度遍历

  • 可以监听动态属性的添加
  • 可以监听到数组的索引和数组length属性
  • 可以监听删除属性

标签:Vue,静态,优化,节点,Vue3.0,组件,diff,哪几,监听
From: https://blog.csdn.net/qq_21087199/article/details/137044917

相关文章

  • 在创建的Vue工程中使用el-radio定义单选框,点击不显示效果
    之前在vue工程中的组件时下面这样的<template><el-radiov-model="radio"value="0">男</el-radio><el-radiov-model="radio"value="1">女</el-radio></template> 结果是点击不显示已选中 需要在script中引入vu......
  • 基于SpringBoot+Vue的医院急诊系统
    运行演示:运行演示跳转开发语言:JavaJDK版本:JDK1.8(或11)服务器:tomcat数据库:mysql 5.6/5.7(或8.0)数据库工具:Navicat开发软件:idea依赖管理包:Maven代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、......
  • 基于SpringBoot+Vue的商务邮箱安全系统
    运行演示:运行演示跳转开发语言:JavaJDK版本:JDK1.8(或11)服务器:tomcat数据库:mysql 5.6/5.7(或8.0)数据库工具:Navicat开发软件:idea依赖管理包:Maven代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、......
  • SpringBoot+Vue的酒店管理系统
    运行演示:运行演示跳转开发语言:Java框架:ssm + vueJDK版本:JDK1.8(或11)服务器:tomcat数据库:mysql 5.6/5.7(或8.0)数据库工具:Navicat开发软件:idea依赖管理包:Maven代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~如果对系统的中的某些部分感到不合适可提供修......
  • vue3路由懒加载
            路由懒加载作用:部分项目过大,首次加载耗费时间较多,路由懒加载可以让首屏组件加载速度更快一些,减少用户首次使用等待时间    路由懒加载的本质:按需引入    下面是未使用懒加载的代码:importLoginfrom'@/views/login/index.vue'constrout......
  • 2.Vue中bootstrap的引用问题
    上来敲书上一个代码一个计划表生成了一下没生成样式看一下代码class有我们熟悉的bootstrap样式那加载不出来啊啊废话找人学习啊老师又不教vscode中vue使用bootstrap第一次参考https://www.jb51.net/javascript/296467tdi.htm选择项目加载啊哎哎哎报错了利用你的......
  • Vue3+TS项目,eslint安装配置
            eslint的作用主要为:可以规范团队的代码风格。在实际项目中,团队的每个成员的编码习惯都不同,这极有可能造成,一个项目多个代码风格,这会造成代码阅读困难,后期维护难度大灯问题,这就需要配置下eslint。首先我们需要先安装 @eslint/create-config 插件:pnpminstal......
  • vue的生命周期
    一、什么是生命周期从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!二、生命周期钩子函数每个Vue实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到DOM并在数据变化时更新DOM等。同时在......
  • VUE3.0(一):模板语法及指令介绍
    模板语法Vue使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。Vue的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进DOM的系统。结合响应系统,在应用状态改变时,Vue能够智能地计算出重新渲染组件的最小代价并应用到DOM......
  • vue3,实现如何在element plus Collapse折叠面板中,只有在点击图标时才展开
        这个的类名是tailwindcss的,主要看这里,对应上面的图片<el-collapse-itemname="1"class="relative"><template#title><divclass="w-full"><div@click="handleChangeURL"......