Angular:使用“trackBy:index”是个好习惯吗?

Pra*_*ava 5 iterator design-patterns angular

在 ngFor 中使用 "trackBy: index" 是否是一个好习惯?

例如 :

<li *ngFor="let error of fileErrors.value; trackBy : index;"> {{error}} </li>
Run Code Online (Sandbox Code Playgroud)

在所有 *ngFor 中都需要使用 trackBy 以提高性能,否则我们可以忽略它。

如果我们忽略,那么默认情况下将使用什么迭代器实现?

Nar*_*arm 5

\n

在所有 *ngFor 中每次使用 trackBy 都是必要的,以提高性能,否则我们可以忽略它。

\n
\n\n

首先,我想说,花时间进行微观优化可能会浪费大量时间,并且最终不会产生真正的性能结果。通常最好关注良好的编码实践/约定,然后在开发周期结束时,当您能够正确识别瓶颈时,再转向性能。

\n\n

然而,在 Angular 中处理大型集合时,使用trackBy. 如果不这样做,那么 Angular 需要删除与数据关联的所有 DOM 元素并重新创建它们。这意味着大量的 DOM 操作,尤其是在大型集合的情况下,而且众所周知,DOM 操作的成本很高。

\n\n

这让我们想到了你的问题:

\n\n
\n

Angular:使用 \xe2\x80\x9ctrackBy: index\xe2\x80\x9d 是一个好的做法吗?

\n
\n\n

答案是,这取决于情况,并非所有ngFor指令都需要这样做。trackBy根据具体情况适当使用。如果您正在处理小型数据集合,那么您实际上不会注意到太多的性能提升,并且您将再次进行过早的优化,这可能不会产生任何显着的性能提升。

\n\n

根据后续评论进行编辑:

\n\n
\n

如果我们在每个 *ngFor 中使用会发生什么?即使收藏量没有那么大?

\n
\n\n

使用trackBy将导致 Angular 根据唯一标识符跟踪已添加或删除的项目,并仅创建或销毁已更改的项目。如果您决定这样做,则可以trackBy在每个地方使用。ngFor这是没有必要的,并且在小型集合中性能提升可能可以忽略不计。

\n

  • @PrabalSrivastava,请参阅更新的答案。希望有助于澄清:) (2认同)