当前位置: 首页 > 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.dtcms.com/a/319196.html

相关文章:

  • ArkTS: McPointChart
  • 【Redis面试精讲 Day 16】Redis性能监控与分析工具
  • 从Web2.0到Web3.0——用户体验如何演进
  • 树莓派安装中文输入法
  • Day09 Tlisa登录认证
  • Linux总线,设备和驱动关系以及匹配机制解析
  • FPGA学习笔记——VGA显示静态图片(ROM IP核)
  • 【博弈 拓扑序 缩点】P9220 「TAOI-1」椎名真昼|省选-
  • Bosco-and-Mancuso Filter for CFA Image Denoising
  • 如何快速掌握Excel公式?14天轻松通关
  • LeetCode 面试经典 150_数组/字符串_除自身以外数组的乘积(13_238_C++_中等)(前缀积)
  • Swift 实战:高效设计 Tic-Tac-Toe 游戏逻辑(LeetCode 348)
  • 解决chrome下载crx文件被自动删除,加载未打包的扩展程序时提示“无法安装扩展程序,因为它使用了不受支持的清单版本解决方案”
  • 冷库温湿度物联网监控系统解决方案:冷链智能化
  • 普通冷库如何升级物联网冷库?工业智能网关赋能冷链智能化转型
  • AI摄像机如何为煤矿减少90%违规事故?
  • HarmonyOS 页面跳转新方案:HMRouter 路由框架全方位使用指南与实践案例
  • Axure 高阶设计:打造“以假乱真”的多图片上传组件
  • 如何使用vLLM运行gpt-oss
  • Nodejs》》MySql
  • 单链表专题---暴力算法美学(1)(有视频演示)
  • Keil MDK-ARM V5.42a 完整安装教程
  • 如何使用Ollama在本地运行gpt-oss
  • 09-netty基础-手写rpc-原理-01
  • 上位机知识篇---aptapt-get
  • 全栈:怎么把sql导入SQLserver里面
  • [特殊字符] 2025年生成式大模型部署与推理优化全景解析
  • STM32 串口控制电机运行系统
  • PyTorch + PaddlePaddle 语音识别
  • 【基础】go进阶学习笔记