javascript - Angular 中虚拟列表的性能优化

标签 javascript angular performance list virtual

我正在 Angular 中构建一个虚拟列表,虽然我已经实现了大部分内容(仅根据滚动位置显示必要的项目、保持准确的滚动位置等),但我还想修复最后一件事.

随着 JavaScript 对象数量的增加,页面开始有点滞后。将项目保存在 JavaScript 数组中对于渲染它们和计算位置等至关重要。减轻浏览器主线程内存负载的最佳策略是什么?我们能否通过将 JavaScript 对象移至 Web Workers 来减少浏览器主线程的内存使用量,这样无论何时我们需要项目时都可以询问它们。这种方法的实际限制是什么?

我们可以使用其他解决方案吗?

我研究了很多关于虚拟列表的教程,但没有一个指出解决内存使用问题的解决方案。

最佳答案

为了提高性能,您可以使用 requestAnimationFramezone.js

使用 zone.js,您可以模拟类似多线程的东西,并将您的计算放到“第二个”javascript 进程中。

在您的组件中注入(inject) NgZone:

constructor(private readonly zone: NgZone) { }

然后你可以像这样在“第二”过程中运行你的计算:

this.zone.runOutsideAngular(() => {
      requestAnimationFrame(() => this.calculateFunction());
});

Here是 angular 的虚拟滚动 dom 的一个很好的实现。尝试一下或查看源代码。

关于javascript - Angular 中虚拟列表的性能优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48504787/

相关文章:

javascript - 插入不带引号的数组,或从数组中删除引号

javascript - 如果拖放太快,则不会调用可排序的放置处理程序

angular - 无法从 Gitlab 文件获取数据 - 出现 Cors 异常

sql-server - R:使用 ODBC 和 SQL Server 读取性能非常慢

sql - MySQL MyISAM 表性能......痛苦地,痛苦地慢

javascript - 等待对象数组加载并对其进行映射()。 react

javascript - 在jquery中添加文本框

angular - 传单图: Rotated Marker for ionic2 (Typescript)

angular - PayPal 可以向其他 PayPal 账户发送付款吗?

带有子查询的 MySQL 查询花费的时间比应该的长