Optimizing Angular Application Performance with Change Detection
Learn about Angular's change detection strategies and how to optimize performance by controlling when and how changes propagate.
0 likes
52 views
Rule Content
{ "title": "Optimizing Angular Application Performance with Change Detection", "description": "Learn about Angular's change detection strategies and how to optimize performance by controlling when and how changes propagate.", "category": "Angular Cursor Rules", "rules": [ { "id": "angular-onpush-change-detection", "description": "Use the OnPush change detection strategy to improve performance by reducing unnecessary change detection cycles.", "recommendation": "Set the change detection strategy to OnPush in components that rely on immutable input properties.", "codeExample": { "language": "typescript", "code": "import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'app-example',\n templateUrl: './example.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ExampleComponent {\n // Component logic\n}" }, "references": [ { "label": "Optimizing Angular Performance: Strategies & Best Practices", "url": "https://medium.com/@satvatiyasin/optimizing-angular-performance-strategies-best-practices-aa5d93b732d9" } ] }, { "id": "angular-immutable-data-structures", "description": "Utilize immutable data structures to enhance change detection efficiency.", "recommendation": "Ensure that input properties are immutable to allow Angular to efficiently detect changes.", "codeExample": { "language": "typescript", "code": "import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'app-example',\n templateUrl: './example.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ExampleComponent {\n private _data: ReadonlyArray<string> = [];\n\n get data(): ReadonlyArray<string> {\n return this._data;\n }\n\n updateData(newData: string[]): void {\n this._data = [...newData];\n }\n}" }, "references": [ { "label": "Optimizing Angular Performance: Strategies & Best Practices", "url": "https://medium.com/@satvatiyasin/optimizing-angular-performance-strategies-best-practices-aa5d93b732d9" } ] }, { "id": "angular-trackby-function", "description": "Implement trackBy functions in ngFor directives to optimize rendering performance.", "recommendation": "Use trackBy to provide a unique identifier for each item in a list to prevent unnecessary DOM manipulations.", "codeExample": { "language": "typescript", "code": "import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-example',\n template: `\n <ul>\n <li *ngFor=\"let item of items; trackBy: trackById\">{{ item.name }}</li>\n </ul>\n `\n})\nexport class ExampleComponent {\n items = [\n { id: 1, name: 'Item 1' },\n { id: 2, name: 'Item 2' }\n ];\n\n trackById(index: number, item: any): number {\n return item.id;\n }\n}" }, "references": [ { "label": "Optimizing Angular Performance in 2024: The Ultimate Guide", "url": "https://taglineinfotech.com/blog/angular-performance/" } ] }, { "id": "angular-avoid-function-calls-in-templates", "description": "Avoid using function calls directly in Angular templates to prevent performance degradation.", "recommendation": "Compute values in the component class and bind them to the template to reduce unnecessary computations during change detection.", "codeExample": { "language": "typescript", "code": "import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-example',\n template: `\n <p>{{ computedValue }}</p>\n `\n})\nexport class ExampleComponent {\n private _value: number = 0;\n\n get computedValue(): number {\n return this._value * 2;\n }\n\n updateValue(newValue: number): void {\n this._value = newValue;\n }\n}" }, "references": [ { "label": "Mastering Angular Change Detection and Performance Optimization", "url": "https://30dayscoding.com/blog/angular-change-detection-performance-optimization" } ] }, { "id": "angular-detach-change-detector", "description": "Detach the change detector for components that do not require frequent updates to improve performance.", "recommendation": "Use ChangeDetectorRef to detach and reattach the change detector as needed.", "codeExample": { "language": "typescript", "code": "import { Component, ChangeDetectorRef } from '@angular/core';\n\n@Component({\n selector: 'app-example',\n template: `\n <p>{{ data }}</p>\n <button (click)=\"updateData()\">Update Data</button>\n `\n})\nexport class ExampleComponent {\n data: string = 'Initial Data';\n\n constructor(private cdr: ChangeDetectorRef) {\n this.cdr.detach();\n }\n\n updateData(): void {\n this.data = 'Updated Data';\n this.cdr.detectChanges();\n }\n}" }, "references": [ { "label": "Optimizing Angular Performance: Strategies & Best Practices", "url": "https://medium.com/@satvatiyasin/optimizing-angular-performance-strategies-best-practices-aa5d93b732d9" } ] } ] }