
Jimmy Boinembalome
Tips to avoid excessive DOM re-rendering.

Angular's ngFor directive is used for rendering lists of items in Angular applications. However, when dealing with large datasets or frequently updating lists, the performance can suffer, resulting in a poor user experience. One way to improve this is by leveraging the trackBy feature of ngFor.
In this article, we will explore how to provide a good user experience using trackBy.
The ngFor directive allows developers to iterate over a collection and generate dynamic content for each item. It is a commonly used directive when working with lists, tables, or any other iterable data structures. By default, ngFor tracks items with the object identity, which can lead to performance issues when the list is modified frequently.
Consider a scenario where a list is updated by adding, removing, or modifying items. Without proper tracking, Angular will re-render the entire list every time there is a change, causing unnecessary DOM manipulation and potentially affecting the application's performance.
trackByThe trackBy feature of ngFor provides a way to specify a function that determines how Angular identifies items in the list. By providing a unique identifier for each item, Angular can accurately track changes and optimize the rendering process. This results in significant performance improvements and a smoother user experience.
To take advantage of trackBy, follow these steps:
In your template, add the trackBy function to the ngFor directive. The function should take two arguments: the index and the item being iterated over. It should return a unique identifier for the item.
<mat-list role="list">
<mat-list-item role="listitem" *ngFor="let user of users; trackBy: trackByFn">
{{ user.name }}
</mat-list-item>
</mat-list>trackBy functionIn your component class, define the trackByFn function. This function will be responsible for generating a unique identifier for each item. Ideally, the identifier should remain consistent even if the item's properties change.
trackByFn(index: number, item: User): number {
return item.id ?? index; // Replace `id` with a property that uniquely identifies each item
}Note: The
item.idhere is only an example. You should use a property that uniquely identifies each item in your specific scenario.
When modifying the list, it is crucial to keep the trackBy function in mind. Ensure that you are updating the items in a way that maintains their unique identifiers. For example, if you are adding a new item, make sure it has a unique identifier before pushing it into the list.
trackByBy implementing trackBy correctly, you can achieve several benefits:
Angular leverages the unique identifiers provided by trackBy to identify added, removed, or modified items efficiently. As a result, it can update the DOM more optimally, reducing unnecessary rendering and improving the overall performance of your application.
When items are added or removed from the list, Angular can apply animations more effectively with the help of trackBy. The smooth transitions create a better user experience, making your application feel more polished and professional.
By tracking items accurately, Angular can determine precisely which parts of the DOM need to be updated. This avoids unnecessary manipulations, resulting in faster rendering and a more responsive application.
Providing a good user experience is crucial for the success of any Angular application, especially when dealing with lists that undergo frequent updates. By leveraging the trackBy feature of ngFor, you can improve performance, reduce unnecessary rendering, and create a smoother user experience.
Remember to define a unique identifier in your trackBy function, update your template, and modify your lists while preserving the unique identifiers. By following this best practice, you can unlock the full potential of ngFor and provide a better user experience in your Angular applications.
Source code of the article: Github source code
Happy coding! ๐