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 以提高性能,否则我们可以忽略它。
如果我们忽略,那么默认情况下将使用什么迭代器实现?
\n\n\n在所有 *ngFor 中每次使用 trackBy 都是必要的,以提高性能,否则我们可以忽略它。
\n
首先,我想说,花时间进行微观优化可能会浪费大量时间,并且最终不会产生真正的性能结果。通常最好关注良好的编码实践/约定,然后在开发周期结束时,当您能够正确识别瓶颈时,再转向性能。
\n\n然而,在 Angular 中处理大型集合时,使用trackBy. 如果不这样做,那么 Angular 需要删除与数据关联的所有 DOM 元素并重新创建它们。这意味着大量的 DOM 操作,尤其是在大型集合的情况下,而且众所周知,DOM 操作的成本很高。
这让我们想到了你的问题:
\n\n\n\n\nAngular:使用 \xe2\x80\x9ctrackBy: index\xe2\x80\x9d 是一个好的做法吗?
\n
答案是,这取决于情况,并非所有ngFor指令都需要这样做。trackBy根据具体情况适当使用。如果您正在处理小型数据集合,那么您实际上不会注意到太多的性能提升,并且您将再次进行过早的优化,这可能不会产生任何显着的性能提升。
根据后续评论进行编辑:
\n\n\n\n\n如果我们在每个 *ngFor 中使用会发生什么?即使收藏量没有那么大?
\n
使用trackBy将导致 Angular 根据唯一标识符跟踪已添加或删除的项目,并仅创建或销毁已更改的项目。如果您决定这样做,则可以trackBy在每个地方使用。ngFor这是没有必要的,并且在小型集合中性能提升可能可以忽略不计。