1. Home
  2. Languages
  3. AngularJS
  4. Boost AngularJS Performance: How to Use track by with ng-repeat

Boost AngularJS Performance: How to Use track by with ng-repeat


AngularJS’s ng-repeat directive is a powerful tool for rendering lists in your applications. However, when working with large datasets or frequently updated lists, performance can take a hit. This is where track by comes into play—a simple yet effective way to make your ng-repeat loops more efficient. Let’s dive into what track by is, why it matters, and how to implement it correctly.

What is track by in AngularJS?

By default, AngularJS uses object identity (===) to track items in an ng-repeat collection. When changes happen, AngularJS has to compare every item in the list to detect additions, removals, or moves, which can lead to unnecessary DOM updates and slower rendering.

track by lets you specify a unique identifier (like an ID) for each item in the collection. This helps AngularJS quickly identify which items have changed, making the digest loop more efficient and improving overall app performance.

Why Use track by?

  • Performance Gains: Reduces the number of DOM manipulations by minimizing unnecessary re-renders.
  • Prevents Flickering: Keeps existing elements stable, avoiding flicker during updates.
  • Handles Duplicate Items: Useful when your list contains non-unique values or duplicates.
  • Improved User Experience: Smoother UI updates for large or dynamic data lists.

How to Use track by with ng-repeat

Basic Syntax

{{ item.name }}

  • items: Your array or collection to iterate.
  • item.id: The unique identifier AngularJS uses to track each item.

Step-by-Step Implementation

  1. Ensure Each Item Has a Unique Identifier
    Ideally, your data objects have a unique property such as id, uuid, or something similar.

  2. Update ng-repeat to Use track by
    Append track by uniqueId in your ng-repeat statement.

  3. Verify Data Consistency
    Confirm that the field you use for tracking is always unique and does not change unexpectedly during data mutations.

Example

js
$scope.users = [
{ id: 1, name: ‘Alice’ },
{ id: 2, name: ‘Bob’ },
{ id: 3, name: ‘Charlie’ }
];

  • {{ user.name }}

With this setup, AngularJS won’t recreate DOM elements if the array changes but the id remains the same, resulting in faster updates.

Common Pitfalls and How to Avoid Them

  • Using Non-Unique Identifiers: Avoid tracking by properties that might not be unique, such as name or index.
  • Tracking by $index: While you can use $index (track by $index), it offers no performance benefit when items are added, removed, or reordered.
  • Changing the Tracking Property: If the tracking property changes, AngularJS treats it as a new item and recreates the DOM node.

Beyond Basics: When to Use track by $index

In some cases, especially with static or simple lists where items don’t change position, you might see track by $index. This can work but isn’t ideal for dynamic lists because AngularJS tracks by the position instead of item identity, which can cause inefficiencies when items move.

Final Thoughts

Implementing track by in your AngularJS ng-repeat loops is a straightforward and effective way to enhance your app’s performance, especially in data-intensive scenarios. By providing AngularJS with a unique identifier for each item, you significantly reduce unnecessary DOM manipulations and deliver a smoother user experience.

If you’re looking to speed up your AngularJS applications or just want cleaner, more maintainable code, track by should be part of your toolkit. Happy coding!

Updated on July 5, 2025
Was this article helpful?

Related Articles

Leave a Comment