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

Angular 由一个bug说起之一:List / Grid的性能问题

在angular中,MatTable构建简单,使用范围广。但某些时候会出现卡顿

卡顿情景:

1一次性请求太多的数据

2一次性渲染太多数据,这会花费CPU很多时间

3行内嵌套复杂的元素

4使用过多的ngStyle或者ngClass。或者一些额外的class

        import { MatTableDataSource } from '@angular/material/table';    
...const data: IDemoRow[] = [];for (let i = 0; i < 8000; i++) {data.push({studentId: `studentId-${i + 1}`,name: `name-${i}`,className: `className-${i}`,age: i,address: `address-${i}`,studySubjects: ['studySubjects-1','studySubjects-2','studySubjects-3','studySubjects-4','studySubjects-5','studySubjects-6',],grade: 4});}this.dataSource = new MatTableDataSource(data);

第一次渲染会卡顿,拖动滚动条时会出现空白现象。

提升办法:

1分页

使用MatPaginator对数据进行分页

    import { MatPaginator } from '@angular/material/paginator';
...@ViewChild(MatPaginator) paginator: MatPaginator;
...ngAfterViewInit() {this.dataSource.paginator = this.paginator;}
<table mat-table [dataSource]="dataSource">...
</table>
<mat-paginator[pageSizeOptions]="[13, 50, 200]"showFirstLastButtons>
</mat-paginator>

效果如下:

2:尽可能少用或不用ngStyle和 ngClass。无效的css及时清理。ngStyle不仅导致性能问题。还会使样式无法被覆盖。因此要慎用

// less
.grade-background {background: #a1bcd6;
}
.grade-color {color: #37474f;
}// html
<table mat-table [dataSource]="dataSource">...<ng-container matColumnDef="grade"><th mat-header-cell *matHeaderCellDef class="class-unnecessary"> Grade </th><td mat-cell *matCellDef="let element"class="table-cell grade-color class-unnecessary-test"[ngClass]="{'grade-background' : element.grade === 3}"[ngStyle]="{'color': '#DB5C5C'}">{{element.grade}}</td></ng-container>...
</table>

第一次渲染会卡顿,且ngStyle的值未被覆盖

3:使用trackBy,trackBy是angular提供的函数,来告诉angular怎么跟踪数组里的项目。这会减少不必要的DOM的删除和重建

trackByFunction(index: number, row: IDemoRow): string {return row.studentId;
}<table mat-table [dataSource]="dataSource"[trackBy]="trackByFunction">...
</table>
<mat-paginator[pageSizeOptions]="[13, 50, 200]"showFirstLastButtons>
</mat-paginator>

4:但是对于更复杂的表的使用,比如分组管理数据。打开或者关闭某个组的时候,还要操作DOM,那么在以上几种方法的基础上可能还会卡顿

这时候需要利用interval分批操作DOM,能减少卡顿问题

intervalH = window.setInterval(() => {...if (...) {window.clearInterval(intervalH);intervalH = undefined;}...
}, interval);

以上就是几种常用的优化方法。

相关文章:

Angular 由一个bug说起之一:List / Grid的性能问题

在angular中&#xff0c;MatTable构建简单&#xff0c;使用范围广。但某些时候会出现卡顿 卡顿情景&#xff1a; 1&#xff1a;一次性请求太多的数据 2&#xff1a;一次性渲染太多数据&#xff0c;这会花费CPU很多时间 3&#xff1a;行内嵌套复杂的元素 4&#xff1a;使用过多的…...

第12章 PyTorch图像分割代码框架-3:推理与部署

推理模块 模型训练完成后&#xff0c;需要单独再写一个推理模块来供用户测试或者使用&#xff0c;该模块可以命名为test.py或者inference.py&#xff0c;导入训练好的模型文件和待测试的图像&#xff0c;输出该图像的分割结果。inference.py主体部分如代码11-7所示。 代码11-7 …...

MYSQL---基础篇

一、数据库操作 1.创建数据库&#xff1a;CREATE DATABASE db_test1&#xff1b; 2.使用数据库&#xff1a;use 数据库名&#xff1b; 3.删除数据库&#xff1a;DROP DATABASE [IF EXISTS] db_name; 4.创建表&#xff1a;CREATE TABLE table_name ( field1 datatype, field2…...

【启扬方案】启扬安卓屏一体机在医疗自助服务终端上的应用解决方案

为了解决传统医疗模式下的“看病难、看病慢”等问题&#xff0c;提高医疗品质、效率与效益&#xff0c;自助服务业务的推广成为智慧医疗领域实现信息化建设、高效运作的重要环节。 医疗自助服务终端是智慧医疗应用场景中最常见的智能设备之一&#xff0c;它通过与医院信息化系统…...

收藏!7个国内「小众」的程序员社区

技术社区是大量开发者的集聚地&#xff0c;在技术社区可以了解到行业的最新进展&#xff0c;学习最前沿的技术&#xff0c;认识有相同爱好的朋友&#xff0c;在一起学习和交流。 国内知名的技术社区有CSDN、博客园、开源中国、51CTO&#xff0c;还有近两年火热的掘金&#xff…...

LeetCode(4)删除有序数组中的重复项 II【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 80. 删除有序数组中的重复项 II 1.题目 给你一个有序数组 nums &#xff0c;请你** 原地** 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数…...

C++ 同构字符串/ 单词规律

给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字符上&#xff0c;相…...

oracle 中 %TYPE %ROWTYPE

前言 PL/SQL 提供了 %TYPE 和 %ROWTYPE 两种特殊的变量&#xff0c;用于声明与表的列相匹配的变量和用户定义数据类型&#xff0c;前一个表示单属性的数据类型&#xff0c;后一个表示整个属性列表的结构&#xff0c;即元组的类型。 举例&#xff1a; -- 数据表TB_TRANS_RECO…...

Pytorch实战教程(五)-计算机视觉基础

0. 前言 计算机视觉是指通过计算机系统对图像和视频进行处理和分析,利用计算机算法和方法,使计算机能够模拟和理解人类的视觉系统。通过计算机视觉技术,计算机可以从图像和视频中提取有用的信息,实现对环境的感知和理解,从而帮助人们解决各种问题和提高效率。本节中,将介…...

51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)

PCF8591数字电压表数码管显示 1.主要功能&#xff1a;讲解视频&#xff1a;2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接&#xff08;可点击&#xff09;&#xff1a; 51单片机PCF8591数字电压表数码管设计( proteus仿真程序设计报告讲解视…...

普华永道于进博会首发“企业数据资源会计处理一体化平台”

11月6日&#xff0c;在第六届中国国际进口博览会上&#xff0c;普华永道发布企业数据资源会计处理一体化平台&#xff08;英文名为Data Accounting Platform&#xff0c;简称DAP&#xff09;。该产品以普华永道“五步法”数据资源入表路径为理论依据&#xff0c;依托多年来普华…...

IDEA 使用Reset Current Branch to Here 进行git 版本控制,图文操作

文章目录 一、总结区别&#xff08;只针对本地仓库操作&#xff09;Soft详细解释文件版本冲突处理 Mixed详细解释Hard详细解释Keep详细解释文件版本冲突处理 二、其他Revert commit 参考文档 一、总结区别&#xff08;只针对本地仓库操作&#xff09; Soft详细解释 Soft操作只…...

有趣的 TCP 抢带宽行为

昨天发了一篇 非技术文章&#xff0c;很多人找我讨论&#xff0c;浓缩成一句话&#xff0c;就是 “死道友而不死贫道”&#xff0c;我的简历上写着这些把戏能带来什么&#xff0c;我的 blog 上写着这么做是多么无耻&#xff0c;哈哈。 看看共享链路上如何挤占带宽&#xff1a; …...

HCIP---VRRP

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一. VRRP概述 VRRP---虚拟路由器冗余协议 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种用于在多个路由器之间创建虚拟路由器的协议。 VRRP使用了一系列协议来实现路…...

在家用Python搞副业,也能月入10000+

下班副业实现经济自由的时候&#xff0c;你还在床上躺着&#xff0c;天天摆烂吗&#xff1f;这样的生活真的是你想要的吗&#xff1f; 疫情在家接一些Python相关的小单子&#xff0c;既能给自己练手&#xff0c;还能赚是真香 从零基础开始真的一台电脑和一部手机就可以✅ 一次…...

play() failed because the user didn‘t interact with the document first.

起因&#xff1a; 进入页面视频不自动播放&#xff08;有时候可以&#xff0c;有时候不行&#xff09;。 原因&#xff1a; Chrome 在66版本后为了避免标签产生随机噪音&#xff0c;都在遵循autoplay政策。 解决方法&#xff1a; 为 video 标签设置静音状态即可&#xff08;添…...

Java任意视频转MP4

Java任意视频转MP4 在做视频上传功能时候&#xff0c;用户可能上传不同类型的视频文件&#xff0c;导致需要特定播放器才能播放&#xff0c;为了解决视频格式统一问题需要把视频转码一下 &#xff0c;转换成统一的MP4格式。我们直接使用第三方工具 FFmpeg FFmpeg介绍 FFmpeg…...

flutter实践:慎用Expanded

问题&#xff1a;在一个Android原生的弹框里显示flutter view,由于使用了Expanded导致组件未显示出来 最神奇的地方在于debug调试模式显示正常&#xff0c;然后用release版本发布时怎么都显示不出来&#xff0c;还导致点击后无响应ANR 问题代码&#xff1a; child: Stateful…...

华为防火墙vrrp+hrp双机热备负载分担(两端为交换机)

主要配置&#xff1a; FW1 hrp enable hrp interface GigabitEthernet1/0/2 remote 172.16.0.2 interface GigabitEthernet1/0/0 这里可以假想为接两条外线&#xff0c;一条外线对应一个vrrid undo shutdown ip address 1.1.1.2 255.255.255.0 vrrp vrid 3 virtual-ip 1.1.1…...

欧拉角(横滚角、俯仰角、偏航角)、旋转矩阵、四元数的转换与解决万向节死锁

1、概述 物体的位姿&#xff08;位置和方向&#xff09;的描述方法一般使用两个坐标系来表示&#xff0c;一个是世界坐标系或地面坐标系&#xff0c;这里我都叫做地面坐标系吧&#xff0c;属于参考坐标系&#xff1b;另一个是自身的坐标系&#xff0c;以飞机为例来讲述一些常见…...

FanControl完全指南:Windows风扇智能控制与静音优化的终极方案

FanControl完全指南&#xff1a;Windows风扇智能控制与静音优化的终极方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tre…...

网络安全防护最佳实践

网络安全防护最佳实践&#xff1a;守护数字世界的防线 在数字化时代&#xff0c;网络安全已成为个人和企业不可忽视的重要议题。随着网络攻击手段的日益复杂&#xff0c;从数据泄露到勒索软件&#xff0c;威胁无处不在。如何有效防护网络安全&#xff1f;本文将介绍几项关键的…...

别再死记硬背MAML公式了!用PyTorch手把手带你跑通第一个元学习Demo(附完整代码)

从零实现MAML元学习&#xff1a;PyTorch实战指南与核心代码解析 元学习&#xff08;Meta-Learning&#xff09;作为机器学习领域的前沿方向&#xff0c;正在重新定义我们构建智能系统的方式。与传统的"从零学习"模式不同&#xff0c;元学习让模型掌握了"学习如何…...

BabelDOC终极指南:如何3步完成专业PDF文档的精准翻译

BabelDOC终极指南&#xff1a;如何3步完成专业PDF文档的精准翻译 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC BabelDOC是一款专注于PDF文档翻译的智能工具&#xff0c;它通过创新的中间语言…...

vLLM-v0.17.1惊艳效果:多LoRA动态切换支持千人千面模型服务

vLLM-v0.17.1惊艳效果&#xff1a;多LoRA动态切换支持千人千面模型服务 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能开源库。这个项目最初由加州大学伯克利分校的天空计算实验室开发&#xff0c;现在已经发展成为一个由学术界和工业界共同维护的社区…...

抖音下载器完整指南:3分钟掌握批量下载无水印视频的终极方法

抖音下载器完整指南&#xff1a;3分钟掌握批量下载无水印视频的终极方法 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…...

手把手教你校准ICM-20948磁力计:从‘八字法’到代码实现,解决姿态角‘指南针’不准

ICM-20948磁力计校准实战&#xff1a;从基础原理到三维空间校准代码实现 当你第一次拿到ICM-20948这样的9轴运动传感器时&#xff0c;可能会被其丰富的功能所吸引——三轴加速度计、三轴陀螺仪加上三轴磁力计&#xff0c;理论上可以完美解算出设备在空间中的姿态。但实际使用中…...

Chord视频分析工具在安防监控场景的应用:快速定位视频中的目标与时间

Chord视频分析工具在安防监控场景的应用&#xff1a;快速定位视频中的目标与时间 1. 安防监控的痛点与解决方案 在安防监控领域&#xff0c;视频分析一直面临着两大核心挑战&#xff1a;如何在海量视频数据中快速定位关键目标&#xff0c;以及如何准确记录目标出现的时间点。…...

NVIDIA Profile Inspector架构深度解析:驱动级性能优化技术揭秘

NVIDIA Profile Inspector架构深度解析&#xff1a;驱动级性能优化技术揭秘 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector作为一款专业的显卡驱动配置工具&#xff0c;通过直…...

VibeVoice Pro中小企业部署案例:CRM系统嵌入式语音播报模块

VibeVoice Pro中小企业部署案例&#xff1a;CRM系统嵌入式语音播报模块 1. 引言&#xff1a;当CRM系统“开口说话” 想象一下这个场景&#xff1a;一位销售经理正盯着电脑屏幕&#xff0c;快速浏览着密密麻麻的客户跟进列表。他需要筛选出今天需要电话回访的客户&#xff0c;…...