【发布时间】:2019-11-19 20:40:47
【问题描述】:
我已经开始在我的应用中使用trackBy 进行一些ngFor 迭代以提高性能。
调试时我注意到trackBy 函数被多次调用。我期望 trackBy 函数会被调用 1 x n 次,其中 n 是数组中的项目数。
我在模板中有一个简单的无序列表
<ul>
<li *ngFor="let item of items; trackBy: trackByFn">{{item.name}}</li>
</ul>
然后我在 trackBy 函数中返回项目的 ID
trackByFn(index, item): void {
return item.id;
}
在这个 StackBlitz 中,trackBy 函数在初始化时被调用 2 x n。 https://stackblitz.com/edit/angular-tm6zdh
在我的应用程序中,它甚至被调用了 7 x n 次。
函数被多次调用正常吗?
当函数被多次调用时,我应该担心性能吗?
另外,Angular 何时真正触发了 trackBy 函数?我在问,因为在我的应用程序中,滚动页面时也会触发 trackBy 函数,这不会更新列表中的任何项目。我无法在 Stackblitz 中重现它
【问题讨论】:
-
这应该重新打开 - 这是一个非常好的问题,与直接在 HTML 模板中调用函数非常不同 - 我很欣赏最好的解决方案可能相似甚至可能相同,但这只是因为解决方案是否相同不会使问题相同...例如问:哪个乐队听起来像皇室成员 A:女王 Q:谁是英国君主 A:女王......非常不同的问题,相同的答案 - 这不是骗局
标签: angular