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

vue如何使用冻结对象提升代码效率及其原理解析

先给大家伙整个实际工作中一定会碰到的问题

如下vue dome ,它的代码非常简单功能也1非常简单,就是一个按钮,点击后会显示有多少条数据
在这里插入图片描述
来看看源码,
html部分就是一个按钮绑定了一个loadData事件,然后在p标签内展示了这个myData这个数据的长度

	<template><div id="app"><button @click="loadData">加载数据</button><p>加载了{{ myData.length  }}条数据</p></div></template>

js部分,可以看到loadData函数调用了getData函数,getData函数会循环十万次,得到十万个数据,然后将这十万个数据赋值给mydata
给页面渲染

	export default {name: 'App',data() {return {myData:[]}},methods: {loadData() {this.myData = this.getData()},getData() {const result = [];for (let i = 0; i < 100000; i++){result.push({id: i,name: `my name is ${i}`,son: {id: `${i+1}`,name:`His name is ${i+1}`}})}return result}},

现在的情况是,当点击按钮时,页面要过很久才做出响应,.打开i控制台使用性能分析器记录可以看到如下显示

渲染和绘制的事件加起来才用6ms,当然这也是对的,本来也就显示一个按钮和一段文本,用不了多长时间
主要是script脚本运行时间长,用来6635 ms,这也太久了,
在这里插入图片描述
既然是script耗费了这么多时间,那么点开事件树,一路展开,

可以发现getData这个函数只用了348ms才占用了百分之5.2的时间,proxySetter这个函数占用6647.8ms,也就是说,效率主要损耗在这个函数里面了,
在这里插入图片描述
再接着展开proxySetter,于是就发现了老朋友observe,能来花时间看这篇文章的都是学过vue的,对这个函数应该都很熟悉,

不熟悉也没关系,你只要知道vue就是靠这个来完成响应式的.它遍历数组,遍历对象,遍历它们里面的每一个属性,而且是深度遍历,

给每一个属性使用Object.defineProperty来进行响应式处理,所以时间主要损耗在这里,

但是很多时候,并不是每一个数据都需要使用响应式,就如同这个dome中的例子,只是想简简单单的展示一下这个数据的长度,这个数据的内容
又不会变化,没必要给它添加响应式
在这里插入图片描述
那有没有什么办法解决这个问题呢?
有,可以使用一段简单的代码,如下

	loadData() {this.myData =Object.freeze(this.getData()) },

使用这段代码给不希望vue处理的对象冻结了.vue会判断这个对象是否被冻结了,如果被冻结了,就不会再去给他遍历添加侦听了,

再次使用性能分析查看,可以发现这次只用了五百多毫秒.
在这里插入图片描述

相关文章:

vue如何使用冻结对象提升代码效率及其原理解析

先给大家伙整个实际工作中一定会碰到的问题 如下vue dome ,它的代码非常简单功能也1非常简单,就是一个按钮,点击后会显示有多少条数据 来看看源码, html部分就是一个按钮绑定了一个loadData事件,然后在p标签内展示了这个myData这个数据的长度 <template><div id&quo…...

基于深度学习网络的手势识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default)load gnet.mat[Pr…...

[论文笔记] 多语言模型中的负干扰研究结果和元学习算法

On Negative Interference in Multilingual Models: Findings and A Meta-Learning Treatment 多语言模型中的负干扰:研究结果和元学习解决办法 概述: 训练语料库大小(训练数据大小和 负干扰 无关)。 语言亲缘关系/语系 和 负干扰 有关。添加相似的语言并不能减轻负面干扰。…...

【OpenVINO】行人摔倒检测 — 基于 OpenVINO C# API 部署PP-Human-下篇

行人摔倒检测 — 基于 OpenVINO C# API 部署PP-Human 4. 配置 PP-Human_Fall_Detection 项目4.1 环境配置4.2 创建 AlxBoard_deploy_yolov8 项目4.3 添加项目源码4.4 添加 OpenVINO C# API4.5 添加 OpenCvSharp 5. 测试 PP-Human_Fall_Detection 项目5.1 创建视频读取器5.2 行人…...

运行报错(三)git bash报错fatal: detected dubious ownership in repository at

报错现象 在运行git 命令时&#xff0c;出现报错 “fatal: detected dubious ownership in repository at” 报错原因 文件夹的所有者和现在的用户不一致 栗子&#xff1a; 文件夹的所有者是root&#xff0c;而当前用户是admin 解决方案 方法一、 将文件夹的所有者替换成ad…...

nvm 的安装及使用

文章目录 一、nvm是什么&#xff1f;二、下载nvm三、在cmd控制台进行操作1、nvm 查询版本号2、查询可以下载的node版本3、安装指定版本4、查看已经安装的node版本5、切换node版本(如果失败那就用管理员身份打开cmd进行切换) 一、nvm是什么&#xff1f; nvm是一个node的版本管理…...

xcode Simulator 安装

xcode Simulator 安装 参考文档 xcode又又又升级了&#xff0c;升级完成之后不下载最新的 iOS 17 Simulator就不能编译运行了&#xff0c;只能静静的等他下载。但是离谱的是这个居然没有断点续下&#xff0c;每次都要重新下载&#xff0c;眼睁睁的看着下载了4个G然后断掉了从…...

【Maven教程】(八):使用 Nexus 创建私服 ~

Maven 使用 Nexus 创建私服 1️⃣ Nexus简介2️⃣ 安装 Nexus2.1 下载 Nexus2.2 Bundle 方式安装 Nexus2.3 WAR 方式安装 Nexus2.4 登录 Nexus 3️⃣ Nexus 的仓库与仓库组3.1 Nexus 内置的仓库3.2 Nexus 仓库分类的概念3.3 创建 Nexus 宿主仓库3.4 创建 Nexus 代理仓库3.5 创…...

螺旋矩阵[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个m行n列的矩阵matrix&#xff0c;请按照顺时针螺旋顺序&#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xf…...

babel6使用ES2020最新js语法

babel6使用ES2020最新js语法 Babel 6 原本是不支持 ES2020 语法&#xff0c;因为它是在 Babel 7 中引入的。如果您想使用 ES2020 语法&#xff0c;您需要将 Babel 6 升级到 Babel 7 或更高版本(推荐),当然也可以在bebel6中安装支持某个语法的plugin,比如你想使用 ES2020 中的可…...

【iOS】简单的网络请求

应iOS小组要求&#xff0c;仿写知乎日报需要实现网络请求并解析JSON格式数据&#xff0c;这篇文章仅对基本的网络请求和iOS中的JSON解析作以记录&#xff0c;还涉及到RunLoop的一点小插曲&#xff0c;具体请求过程和原理以后会详细学习&#xff01;&#x1f64f; 基本网络流程简…...

Vulnhub系列靶机---mhz_cxf: c1f

靶机文档&#xff1a;&#xff1a;mhz_cxf: c1f 下载地址&#xff1a;Download (Mirror): 网卡配置 靶机开机后按住shift&#xff0c;出现界面如图&#xff0c;按e键进入安全模式&#xff1a; 找到ro&#xff0c;删除该行后边内容&#xff0c;并将ro 。。。修改为&#xff1a…...

SDRAM与DRAM

SDRAM&#xff08;同步动态随机存取内存&#xff09;和DRAM&#xff08;动态随机存取内存&#xff09;都是RAM的一种类型&#xff0c;但是它们工作的方式有所不同。 DRAM&#xff1a;DRAM是最基础的动态随机存取内存&#xff0c;它的工作方式是总线在内存中读取或写入数据的速度…...

数据库基础(一)【MySQL】

文章目录 安装 MySQL修改密码连接和退出数据库服务器使用 systemctl 管理服务器进程配置数据库从文件角度看待数据库查看连接情况 安装 MySQL 这是在 Linux 中安装 MySQL 的教程&#xff1a;Linux 下 MySQL 安装。本系列测试用的 MySQL 版本是 5.7&#xff0c;机器是 centOS7.…...

C++ -- 位运算与常用库函数(ACWING语法基础)

位运算 & 与 | 或 ~ 非 ^ 异或 >> 右移 << 左移 常用操作&#xff1a; 求x的第k位数字 x >> k & 1lowbit(x) x & -x&#xff0c;返回x的最后一位1 常用库函数、 reverse 翻转 翻转一个vector&#xff1a; reverse(a.begin(), a.end(…...

老卫带你学---leetcode刷题(557. 反转字符串中的单词 III)

557. 反转字符串中的单词 III 问题&#xff1a; 给定一个字符串 s &#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。 示例 1&#xff1a;输入&#xff1a;s "Lets take LeetCode contest" 输出&#xff1a;"…...

IEEE754 标准存储浮点数

1. IEEE754 标准简介 IEEE754 标准是一种用于浮点数表示和运算的标准&#xff0c;由国际电工委员会&#xff08;IEEE&#xff09;制定。它定义了浮点数的编码格式、舍入规则以及基本的算术运算规则&#xff0c;旨在提供一种可移植性和一致性的方式来表示和处理浮点数 IEEE754 …...

CSS 两栏布局

目录 CSS两栏布局&#xff08;左列定宽&#xff0c;右列自适应宽&#xff09; 方法一&#xff1a;浮动margin 方法二&#xff1a;定位margin 方法三&#xff1a;浮动BFC 方法四&#xff1a;Flex布局 方法五&#xff1a;able布局 CSS两栏布局&#xff08;左列不定宽&#…...

RHCSA常用命令总结

RHCSA回顾 1.Linux学习环境的安装部署 VMware虚拟机rhel9.x 磁盘容量&#xff1a;20GB cpu:1颗2核心 内存&#xff1a;2G 网卡&#xff1a;NAT 新CD/DVD设置镜像源文件 取消显示器的3d支持 &#xff08;1&#xff09;安装RHEL9 (2)组件&#xff1a;带有GUI的服务器 (3)分区…...

【Spring Boot】详解restful api

目录 1.restful api 1.1.历史 1.2.内容 1.3.传参 2.Spring Boot中的Restful Api 1.restful api 1.1.历史 RESTful API&#xff08;Representational State Transferful Application Programming Interface&#xff09;是一种设计风格&#xff0c;用于构建基于网络的应用…...

全原子设计驱动的蛋白质工程:RFDiffusionAA技术原理与实战指南

全原子设计驱动的蛋白质工程&#xff1a;RFDiffusionAA技术原理与实战指南 【免费下载链接】rf_diffusion_all_atom Public RFDiffusionAA repo 项目地址: https://gitcode.com/gh_mirrors/rf/rf_diffusion_all_atom 在药物研发与蛋白质工程领域&#xff0c;如何高效设计…...

虚拟电厂之后,最先不够用的为什么是老一套功率预测和经营逻辑?

2026年开年&#xff0c;新能源圈最火的话题是什么&#xff1f;不是组件价格&#xff0c;不是储能成本&#xff0c;而是——虚拟电厂。1月初&#xff0c;江苏省发改委正式印发《关于促进我省虚拟电厂高质量发展的通知》&#xff0c;同步公布全省首批100个虚拟电厂建设项目清单。…...

学习笔记-http协议

1.http介绍http&#xff08;超文本运输协议&#xff09;是一种应用层协议&#xff0c;他定义了web客户机是如何向web服务器请求web页面&#xff0c;以及服务器如何将web页面传送给客户机的。他是基于 TCP&#xff08;HTTP/3 基于 UDP&#xff09;的结构化请求 - 响应协议&#…...

Kandinsky-5.0-I2V-Lite-5s效果展示:手绘草图→线条流动+色彩渐变动态视频

Kandinsky-5.0-I2V-Lite-5s效果展示&#xff1a;手绘草图→线条流动色彩渐变动态视频 1. 模型简介 Kandinsky-5.0-I2V-Lite-5s是一款轻量级图生视频模型&#xff0c;它能将静态图片转化为约5秒、24fps的短视频。你只需要上传一张首帧图片&#xff0c;再补充一句运动或镜头描述…...

4个高效步骤实现HMCL启动器数据无忧迁移全攻略

4个高效步骤实现HMCL启动器数据无忧迁移全攻略 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL 当你终于升级了新电脑&#xff0c;兴冲冲地安装好HMCL启动器准备…...

Phi-4-mini-reasoning加速深度学习:卷积神经网络(CNN)模型设计与调优实战

Phi-4-mini-reasoning加速深度学习&#xff1a;卷积神经网络&#xff08;CNN&#xff09;模型设计与调优实战 1. 引言&#xff1a;当AI开始设计AI 在图像分类任务中&#xff0c;我们常常陷入这样的困境&#xff1a;面对海量的网络结构选择和超参数组合&#xff0c;即使是有经…...

Qwen3-ForcedAligner-0.6B在法庭庭审记录自动化中的创新应用

Qwen3-ForcedAligner-0.6B在法庭庭审记录自动化中的创新应用 1. 引言 想象一下这样的场景&#xff1a;法庭书记员正紧张地记录着庭审过程&#xff0c;手指在键盘上飞快敲击&#xff0c;却还是跟不上律师和证人的语速。重要细节被遗漏&#xff0c;庭审记录不完整&#xff0c;甚…...

基于Simulink的Smith预估器PID整定与延迟系统控制实验

1. 从零开始理解Smith预估控制 第一次接触Smith预估器时&#xff0c;我也被这个"时间旅行"般的概念惊艳到了。想象一下&#xff0c;你正在用热水器洗澡&#xff0c;每次调节水温都要等10秒才能感受到变化——这就是典型的纯延迟系统。Smith预估器的精妙之处在于&…...

YOLOv5与DeepSort结合优化:如何调整参数让目标跟踪更精准(附代码对比)

YOLOv5与DeepSort参数调优实战&#xff1a;提升目标跟踪精度的关键策略 在计算机视觉领域&#xff0c;目标跟踪技术正从实验室快速走向工业应用。当基础功能实现后&#xff0c;如何让系统在实际场景中表现更稳定、更精准&#xff0c;成为开发者面临的核心挑战。本文将深入剖析Y…...

深入解析 OpenSTLinux 6.6 Yocto SDK 环境配置与 BSP 源码部署 - STM32MP2 实战(基于STM32CubeMX)

1. OpenSTLinux 6.6 Yocto SDK环境配置全攻略 刚拿到STM32MP2开发板时&#xff0c;最让人头疼的就是搭建开发环境。我花了整整三天时间才把Yocto SDK环境配置明白&#xff0c;今天就把这些实战经验分享给大家&#xff0c;让你少走弯路。 首先需要下载两个关键文件&#xff1a;S…...