Pipes help change how data looks in your app. But if they run too much, your app can slow down. Knowing how to keep pipes fast makes your app smooth and happy.
Pipe performance considerations in Angular
import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'examplePipe', pure: true // or false }) export class ExamplePipe implements PipeTransform { transform(value: any, ...args: any[]): any { // change value here const changedValue = value; // example placeholder return changedValue; } }
Pure pipes run only when input changes, so they are faster.
Impure pipes run every time change detection runs, which can slow your app.
@Pipe({ name: 'purePipe', pure: true })
export class PurePipe implements PipeTransform {
transform(value: string): string {
return value.toUpperCase();
}
}@Pipe({ name: 'impurePipe', pure: false })
export class ImpurePipe implements PipeTransform {
transform(value: number[]): number[] {
return value.slice().sort();
}
}This example shows a pure pipe that doubles a number. The pipe runs only when the number changes. Clicking the button increases the number and triggers the pipe again.
import { Component, Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'double', pure: true }) export class DoublePipe implements PipeTransform { transform(value: number): number { console.log('DoublePipe transform called'); return value * 2; } } @Component({ selector: 'app-root', template: ` <h1>Number doubled: {{ number | double }}</h1> <button (click)="increment()">Increment</button> ` }) export class AppComponent { number = 1; increment() { this.number++; } }
Use pure pipes for simple, fast transformations to avoid unnecessary work.
Avoid heavy calculations inside pipes; do them outside if possible.
Impure pipes can cause performance issues because they run very often.
Pipes change how data looks but can slow your app if used carelessly.
Pure pipes run only when inputs change, making them faster.
Impure pipes run every time Angular checks for changes, so use them sparingly.
Practice
Solution
Step 1: Understand pure pipe behavior
Pure pipes execute only when their input values change, avoiding unnecessary recalculations.Step 2: Compare with impure pipes
Impure pipes run on every change detection, which can slow the app. Pure pipes avoid this.Final Answer:
It runs only when its input changes, improving performance. -> Option BQuick Check:
Pure pipe = runs on input change only [OK]
- Thinking pure pipes run every change detection
- Confusing pure pipes with caching mechanisms
- Assuming pipes manipulate the DOM directly
Solution
Step 1: Recall pipe decorator syntax
The @Pipe decorator accepts a 'pure' boolean property to specify pipe purity.Step 2: Identify correct pure pipe declaration
Setting pure: true declares a pure pipe. If omitted, pure defaults to true.Final Answer:
@Pipe({name: 'examplePipe', pure: true}) export class ExamplePipe {} -> Option CQuick Check:
pure: true means pure pipe [OK]
- Using 'impure' instead of 'pure' property
- Setting pure: false for pure pipes
- Confusing pure with impure pipe syntax
{{ items | customPipe }}Assuming
customPipe is impure, what happens when Angular runs change detection but items array reference does not change?Solution
Step 1: Understand impure pipe behavior
Impure pipes run on every change detection cycle regardless of input changes.Step 2: Analyze effect of unchanged input reference
Even if the input reference stays the same, impure pipes recalculate output every time.Final Answer:
The pipe runs again and recalculates output every time. -> Option DQuick Check:
Impure pipe = runs every change detection [OK]
- Assuming impure pipes cache results
- Believing input reference must change for pipe to run
- Thinking Angular errors on impure pipes
Solution
Step 1: Recall pure pipe trigger condition
Pure pipes run only when their input reference changes.Step 2: Identify cause of repeated recalculation
If the input is a new object or array instance each time, the reference changes, triggering the pipe.Final Answer:
The pipe input is a new object or array instance each time. -> Option AQuick Check:
New input reference triggers pure pipe [OK]
- Assuming pure pipes run without input changes
- Thinking missing decorator causes recalculation
- Believing Angular lacks pure pipe support
Solution
Step 1: Identify performance issue with impure pipe
Impure pipes run every change detection, causing slowdowns with large lists.Step 2: Apply optimization by using pure pipe
Pure pipes run only when input changes. Changing input reference only on data update avoids unnecessary runs.Final Answer:
Convert the pipe to pure and ensure the input list reference changes only when data updates. -> Option AQuick Check:
Pure pipe + stable input reference = better performance [OK]
- Adding logs does not improve performance
- Filtering in template causes repeated recalculations
- Manually calling detectChanges() won't fix pipe slowness
Ready to prove it?
Pass the test and this pattern moves unknown
