当前位置: 首页 > news >正文

vue3对比vue2的性能优化和提升 :Vue 3 vs Vue 2

1.性能提升

1.1.响应式系统的改进:

从 Object.defineProperty 到 Proxy

Vue2:Vue 2 的响应式系统基于 Object.defineProperty,它为每个属性单独设置 getter 和 setter。虽然能够满足基本需求,但它在以下方面存在性能瓶颈:
  • Vue2 中数组监听的局限性:Vue2 通过Object.defineProperty实现响应式,这种方式无法监听数组索引的变化
  • push()、pop()、shift()、unshift()、splice()、sort()、reverse(),这些是Vue2 对数组的 7 个方法进行了重写,使其能触发视图更新,另外,Vue 提供了Vue.set(或this.$set) 方法专门用于修改数组索引,以下是语法解释+代码演示加深理解:

push():在数组末尾添加元素

pop():删除数组最后一个元素

shift():删除数组第一个元素

unshift():在数组开头添加元素

splice():灵活地删除、添加或替换元素

sort():对数组进行排序

reverse():反转数组元素顺序

Code demonstration:(code可以保存在html文件直接运行查看演示效果)

<!DOCTYPE html>
<html>
<head><title>Vue2 数组更新方法全演示</title><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script><style>body {font-family: Arial, sans-serif;padding: 20px;}.demo-container {max-width: 800px;margin: 0 auto;}.array-display {padding: 15px;background-color: #f0f7ff;border: 1px solid #bed6ff;border-radius: 4px;margin: 15px 0;}.button-group {margin: 10px 0;display: flex;flex-wrap: wrap;gap: 8px;}button {padding: 6px 12px;border: 1px solid #ccc;border-radius: 4px;cursor: pointer;background-color: #fff;}button:hover {background-color: #f5f5f5;}.special-method {background-color: #fff3cd;border-color: #ffeeba;}.non-reactive {background-color: #f8d7da;border-color: #f5c6cb;}.log-area {margin-top: 20px;padding: 10px;border: 1px solid #ddd;border-radius: 4px;height: 200px;overflow-y: auto;font-size: 14px;}</style>
</head>
<body><div class="demo-container" id="app"><h2>Vue2 数组更新方法演示</h2><div class="array-display"><strong>当前数组:</strong><span v-for="(item, index) in items" :key="index">{{ index }}: {{ item }}<span v-if="index !== items.length - 1">, </span></span></div><h3>1. Vue2 重写的7个数组方法(自动触发更新)</h3><div class="button-group"><button @click="handlePush">push('新元素')</button><button @click="handlePop">pop()</button><button @click="handleShift">shift()</button><button @click="handleUnshift">unshift('首元素')</button><button @click="handleSplice">splice(替换元素)</button><button @click="handleSort">sort()</button><button @click="handleReverse">reverse()</button></div><h3>2. 特殊更新方法(解决响应式限制)</h3><div class="button-group"><button class="special-method" @click="handleSet">this.$set(修改索引)</button><button class="special-method" @click="handleDestruct">解构赋值(强制更新)</button><button class="non-reactive" @click="handleDirectModify">直接修改索引(不生效)</button></div><div class="log-area"><strong>操作日志:</strong><div v-for="(log, i) in logs" :key="i" style="margin: 4px 0;">{{ 
http://www.lryc.cn/news/613571.html

相关文章:

  • 重学React(三):状态管理
  • windows内核研究(内存管理-线性地址的管理)
  • Java集合的遍历方式(全解析)
  • 0807 IO线程的同步互斥
  • latex in overleaf快速通关论文排版
  • FPGA学习笔记——VGA显示静态图片(ROM IP核)
  • 【数据结构入门】双向链表
  • 深入理解 S7-200 SMART 的 “数据语言”:从位到字符串的格式密码
  • C++线程库的学习
  • 【JS】扁平树数据转为树结构
  • 蓝桥杯----数码管、按键、定时器与中断
  • 【感知机】感知机(perceptron)学习算法的收敛性
  • 代码随想录算法训练营 Day20
  • Redis面试精讲 Day 13:Redis Cluster集群设计与原理
  • P1037 [NOIP 2002 普及组] 产生数
  • NFS 服务器
  • Docker容器强制删除及文件系统修复完整指南
  • mysql的InnoDB索引总结
  • 传统防火墙与下一代防火墙
  • 中介效应分析 原理解释 实例分析
  • python中的集合
  • 移动端录屏需求调研:以小熊录屏为例的轻量级实现方案
  • 线程池创建线程
  • jmeter要如何做接口测试?
  • Jmeter使用第一节-认识面板(Mac版)
  • 【线性代数】5特征值和特征向量
  • Vue3获取当前页面相对路径
  • 站在Vue的角度,对比鸿蒙开发中的状态管理
  • Casrel关系抽取
  • vue3 el-select 加载触发