javascript - 如何提高 Angular 列表的滚动速度?
问题描述
我使用 Angular 10 并有一个 2 列布局,其中两列都包含一个包含mat-list
数千个元素的项目。滚动速度急剧下降,所以我解决了这个问题如下:
- 简化 CSS 的影响
- 添加
transform: translateX(0) translateZ(0);
到列(来源) - 添加了对列表的trackBy支持
ngFor
- 从 HTML 模板中删除了不必要的调用
- 添加了一个惰性显示行为,仅在用户滚动到列表末尾时才加载新元素
现在我有两个问题:
- 在两个组件中(对于每一列),我添加了一个
HostListener('mousewheel')
来实现这种“延迟显示行为”,如下所示:
@HostListener('mousewheel', ['$event'])
scroll(event: MouseEvent) {
clearTimeout(this.scrollTimeout);
this.scrollTimeout = setTimeout(() => {
this.load_More_Elements_If_End_Of_List_Is_Reached();
}, 250);
}
似乎这个简单的功能也将性能降低了几个 FPS。Javascript 是否有一个内置事件,我可以附加到最后一个元素,所以我不需要在 Javascript 中明确检查它。就像是(onDisplay)="load_more_elements()"
- 我还缺少其他改进吗?
解决方案
推荐阅读
- javascript - 替换对象数组
- node.js - 将经过 Firebase 身份验证的用户信息(例如 FirstName、LastName、Gender 等)存储到我们自己的数据库中
- sql - 如何在 bigquery 中拆分列和分组?
- spring-test - Spring TestContext 缓存故障排除
- javascript - 未捕获的类型错误:无法在 addToCart (cart.js:60) 读取 null 的属性“产品”
- c# - 在一对多关系.net实体框架中的一个视图中显示数据
- javascript - Flexbox在强制换行时全宽?
- angular - 通过域名访问时不加载整个 Angular 2 应用程序
- lsf - 强制 LSF 在不同的主机上执行作业
- java - 如何使用域直接访问部署在 aws Tomcat 中的 Web 应用程序而不显示端口?