Angular trackBy应该被调用多少次

Angular trackBy应该被调用多少次,angular,Angular,我已经开始在我的应用程序中使用trackBy进行一些ngFor迭代,以提高性能 调试时我注意到,trackBy函数被多次调用。我期望trackBy函数被调用1 x n次,其中n是数组中的项数 我在模板中有一个简单的无序列表 <ul> <li *ngFor="let item of items; trackBy: trackByFn">{{item.name}}</li> </ul> 在这个StackBlitz中,trackBy函数在init上

我已经开始在我的应用程序中使用
trackBy
进行一些
ngFor
迭代,以提高性能

调试时我注意到,
trackBy
函数被多次调用。我期望
trackBy
函数被调用1 x n次,其中n是数组中的项数

我在模板中有一个简单的无序列表

<ul>
  <li *ngFor="let item of items; trackBy: trackByFn">{{item.name}}</li>
</ul>
在这个StackBlitz中,
trackBy
函数在init上被称为2xn。 在我的应用程序中,它甚至被称为7xn次

函数被多次调用是否正常

当函数被多次调用时,我是否应该担心性能


另外,
trackBy
功能何时由角度传感器触发?我这样问是因为在我的应用程序中,当滚动页面时,
trackBy
功能也会被触发,这不会更新列表中的任何项目。我无法在Stackblitz中重现它

Angular的标准变化检测正在运行。将
changeDetection:ChangeDetectionStrategy.OnPush
添加到组件的声明中应该可以减少
trackBy
函数调用的数量

trackByFn(index, item): void {
    return item.id;
}