在 Angular 1.6 中,ng-repeat
track by
仍然有意义吗?这是绩效的好习惯吗?
如果数组中的每个对象都具有唯一标识符属性,则应将该属性用于track by
部分。例如:
$scope.items = [
{id: 1, name: "some name"},
{id: 2, name: "some name"}
];
您的 ng 重复将如下所示:
ng-repeat="item in items track by item.id"
如 AngularJS 文档中所述:
最佳实践:如果您正在使用具有唯一标识符属性的对象,则应按此标识符而不是对象实例进行跟踪,例如,按 item.id 跟踪的项中的项。如果您稍后重新加载数据,ngRepeat 将不必为已经呈现的项目重新构建 DOM 元素,即使集合中的 JavaScript 对象已被替换为新对象。对于大型集合,这可显著提高呈现性能。
但是,如果您的阵列看起来像这样,则可能存在欺骗:
$scope.items = [
{name: "name1"},
{name: "name1"},
{name: "name2"},
];
您的 ng 重复将如下所示:
ng-repeat="item in items track by $index"
在此小提琴中,您可以检查使用或不使用的性能影响track by
.
小提琴的来源