Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度4*Ng,性能卓越_Angular_Typescript - Fatal编程技术网

Angular 角度4*Ng,性能卓越

Angular 角度4*Ng,性能卓越,angular,typescript,Angular,Typescript,我使用*ngFor迭代了一个大数据集,性能不好 我做了一些研究,发现这是一个已知的问题,因为数据绑定 在本例中,我不需要数据绑定,因为数据集是静态的 有没有办法“关闭”数据绑定 多谢各位 大数据集 根据“大”,这可能是一个渲染问题 尝试将其虚拟化 并且不要同时显示太多的元素如果不使用数据绑定,那么就没有数据绑定 如果要提高循环性能,可以使用自定义trackBy函数 *ngFor="let x of y; trackBy: tbfn" tbfn(index, item) { return item

我使用
*ngFor
迭代了一个大数据集,性能不好

我做了一些研究,发现这是一个已知的问题,因为数据绑定

在本例中,我不需要数据绑定,因为数据集是静态的

有没有办法“关闭”数据绑定

多谢各位

大数据集

根据“大”,这可能是一个渲染问题
尝试将其虚拟化

并且不要同时显示太多的元素

如果不使用数据绑定,那么就没有数据绑定

如果要提高循环性能,可以使用自定义trackBy函数

*ngFor="let x of y; trackBy: tbfn"
tbfn(index, item) { return item.id; }
您还可以使用选择数据的子集

get myResults() { return this.myRes.slice(this.page, this.offset); }

我认为最好的方法是创建一个包含ngFor的特定组件

然后,在推送上使用更改检测策略。使用此策略,组件只在至少一个输入发生更改时才评估更改并重新渲染DOM。 如果不使用输入,则只有初始渲染


如果我的回答不清楚,你能在你的回答中添加一个数据示例吗?这样我就不能尝试重新创建stackblitz。

是的,我根本不需要数据绑定,我只需要在集合上迭代来显示它。有什么方法可以做到这一点吗?请参阅答案的第二部分我创建了一个特定的组件,但我不知道如何在不使用输入的情况下将数据从父组件传递给它。请注意,在这种情况下,性能甚至更差。如果数据集是静态的,为什么需要将其与输入一起传递?你就不能直接从服务中心拿过来吗?我想知道性能如何会更差,您是否将OnPush检测策略添加到组件中?它也用于父组件中,因此我想将其传递给子组件以保存HTTP调用。是的,添加了OnPush检测策略。您可以添加父组件和子组件的模板和类吗?