Performance: Smart and dumb component pattern
MEDIUM IMPACT
This pattern affects rendering speed and interaction responsiveness by separating data handling from UI rendering.
import { Component, Input } from '@angular/core'; @Component({ selector: 'app-user-display', template: `<div>{{user?.name}}</div>` }) export class UserDisplayComponent { @Input() user: any; } @Component({ selector: 'app-user-container', template: `<app-user-display [user]="user"></app-user-display>` }) export class UserContainerComponent { user = null; constructor() { fetch('https://api.example.com/user') .then(res => res.json()) .then(data => this.user = data); } }
import { Component } from '@angular/core'; @Component({ selector: 'app-user', template: `<div>{{user?.name}}</div>` }) export class UserComponent { user = null; constructor() { fetch('https://api.example.com/user') .then(res => res.json()) .then(data => this.user = data); } }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Smart and dumb components separated | Minimal DOM updates in dumb components | Single reflow on data change | Low paint cost due to isolated updates | [OK] Good |
| Combined data fetching and UI rendering | Full component DOM updates | Multiple reflows on data fetch | Higher paint cost due to full re-render | [X] Bad |