首页 > 其他分享 >Vue性能优化--在Vue中,千万别用属性数组作为循环的对象

Vue性能优化--在Vue中,千万别用属性数组作为循环的对象

时间:2023-10-17 10:12:30浏览次数:42  
标签:index 千万别 Vue dcmbuffer -- let 数组 canvasImage

在Vue中,千万别用属性数组作为循环的对象

methods:{

    test(){
        ...上面省略业务逻辑1万字
		// 16位像素数组
        let dcmbuffer = new Uint16Array(dcmInfo._dictionary.dict["7FE00010"].Value[0] as ArrayBuffer);
        this.currentImageInfo = {
            pixel:dcmbuffer,
            height: dcmInfo._dictionary.dict["00280010"].Value[0],
            width: dcmInfo._dictionary.dict["00280011"].Value[0]
        };
        
        let ctx = this.$refs.ImageCanvas_imageShow.getContext('2d', {alpha: false});
        // 创建canvas图像
        let canvasImage = ctx.createImageData(this.currentImageInfo.width, this.currentImageInfo.height);
        for (let i=0,index=0; i<canvasImage.data.length; i+=4,index++) {
            // 注:canvasImage.data是rgba四通道数组,并且传入图像是16位位图
            canvasImage.data[i] = Math.floor(this.currentImageInfo.pixel[index]/256);
            canvasImage.data[i+1] = Math.floor(this.currentImageInfo.pixel[index]/256);
            canvasImage.data[i+2] = Math.floor(this.currentImageInfo.pixel[index]/256);
            canvasImage.data[i+3] = 255;
        }   
        // 绘制图像: canvas图像 偏移x 偏移y
        ctx.canvas.width = this.currentImageInfo.width;
        ctx.canvas.height = this.currentImageInfo.height;
        ctx.putImageData(canvasImage, 0, 0, 0,0, 400,500);
    }

}

​ 观察上面的代码,可以发现这就是普普通通的使用canvas渲染像素数组的代码,像素规模500万以上。有但是上面运行之后发现性能消耗特别慢,大概会有个十几秒左右才会把图像在canvas渲染出来。通过浏览器的性能分析发现,他使用了get导致的性能消耗。随后想到是不是由于获取vue属性时要通过get方式走,因此导致的性能消耗(我猜的,我以为通过this.xxx应该是走的引用,但是为什么频繁调用get,我也不清楚,可能得去问尤雨溪了,哈哈哈)。

性能分析

​ 随后将关键代码改为,不在通过this指向属性,最后成功解决渲染慢的问题。特此记录

			canvasImage.data[i] = Math.floor(dcmbuffer[index]/256);
            canvasImage.data[i+1] = Math.floor(dcmbuffer[index]/256);
            canvasImage.data[i+2] = Math.floor(dcmbuffer[index]/256);

标签:index,千万别,Vue,dcmbuffer,--,let,数组,canvasImage
From: https://www.cnblogs.com/MCMonkey/p/17769075.html

相关文章

  • 2-1.信息的存储
    信息存储虚拟内存空间是地址的集合字长\(w\_bit\)对应空间\((0,2^w-1)\)字节8bits位模式数据排布大/小端法布尔运算C中运算逻辑运算移位运算左移右移逻辑右移:无符号数算数右移:有符号数......
  • Prometheus监控RocketMQ
    本文基于官方提供的RocketMQExporter来监控RocketMQ集群1.BrokerTPS/QPS的监控2.消息积压监控3.消费组消费演示监控最终的Grafana面板效果图如下:楼主RocketMQ环境是三主三从集群(只要在其中一台部署监控即可)配置步骤1.安装RocketMQExporterRocketMQ官方已经提供了expor......
  • keep-alive实现tab标签页缓存
    标签页缓存 实现效果:已经打开的tab页签,再次访问不重新加载;关闭tab页签后再次访问,则重新加载实现技术:keep-alive组件的include属性指定页面缓存 一、修改Main.vue1、代码:<keep-alive  :include="cachPage">   <router-view></router-view></keep-alive> ......
  • CRM系统如何高效管理客户并为企业赋能?
     CRM客户管理系统对于企业管理者来说,已经不是陌生的词汇了。它是企业快速实现数字化转型的有效工具,让企业能够通过自动化的业务流程系统化客户管理、提高客户转化率。作为“客户管理系统”,CRM系统怎样管理客户并为企业赋能?一、数据分析提高转化率客户转化的前提是充分的认识......
  • 19 表单输入绑定
    <template><h3>表单输入绑定</h3><formaction=""><inputtype="text"v-model="message"><p>{{message}}</p></form></template><script>exportdefault{......
  • 初学Bokeh:【1】跬步
    初学Bokeh:【1】跬步Bokeh是一个交互式、可视化Python库。使用Bokeh可以快速、便捷地创建交互式绘图、仪表板和数据应用程序等相关应用。Bokeh库可以帮助用户构建复杂、绚丽的图形,是python数据可视化工具中的重要一员。从今天开始,随着对Bokeh的学习的逐步展开,本系列学习笔记中将......
  • 11_滑动窗口最大值
    滑动窗口最大值给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例1:输入:nums=[1,3,-1,-3,5,3,6,7],k=3输出:[3,3,5,5,6,7]解释:滑动......
  • websocket 简易demo
    websocket简易demo网上找的然后写的demo还有一种写法,跟这种写法不同,先记录这一种引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency&g......
  • MySQL的InnoDB引擎的事务
    康师傅YYDSMySQL中只有InnoDB支持事务1SHOWENGINES;事务基础知识事务的ACID特性原子性(atomicity):原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚。一致性(consistency):根据定义,一致性是指事务执行前后,数据从一个合法性状态变换到另外一个合法性......
  • 能否有替代postman的工具
    有,curl命令. 且在windows下可以使用该命令. 第一步: 进入官网,下载对应电脑系统的版本第二步:解压缩,找到bin子文件夹第三步:复制文件夹地址,加入环境变量第四步:打开cmd,然后输入curl--help, 如出现对应的信息,则代表成功了.......