В Angular списки часто реализуются с помощью директивы
*ngFor. При обновлении массива Angular по умолчанию
пересоздаёт все элементы DOM, что может вызывать снижение
производительности при работе с большими списками. Для
оптимизации используется trackBy функция, которая позволяет
Angular идентифицировать элементы и обновлять только изменившиеся.
Синтаксис использования trackBy:
<li *ngFor="let item of items; trackBy: trackById">{{ item.name }}</li>
trackById(index: number, item: any): number {
return item.id;
}
Принцип работы:
trackBy принимает два аргумента: индекс элемента в
массиве и сам элемент.id или любой другой уникальный ключ.trackBy и обновляет только изменившиеся
элементы.Пример оптимизации больших списков:
@Component({
selector: 'app-user-list',
template: `
<ul>
<li *ngFor="let user of users; trackBy: trackByUserId">
{{ user.name }}
</li>
</ul>
`
})
export class UserListComponent {
users = [
{ id: 1, name: 'Алексей' },
{ id: 2, name: 'Мария' },
{ id: 3, name: 'Иван' }
];
trackByUserId(index: number, user: any): number {
return user.id;
}
}
Преимущества использования trackBy:
Рекомендации:
trackBy для больших списков и
таблиц.trackBy: item => item.trackBy и правильная организация анимаций с временными
функциями позволяют создавать интерфейсы Angular, которые остаются
отзывчивыми и визуально приятными даже при работе с большими объёмами
данных.