Performance: Why standalone components matter
Standalone components reduce bundle size and speed up initial page load by avoiding large module dependencies.
Jump into concepts and practice - no test required
import { Component } from '@angular/core'; @Component({ standalone: true, selector: 'app-my', template: `<p>Standalone works!</p>`, imports: [] }) export class MyComponent {}
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MyComponent } from './my.component'; @NgModule({ declarations: [MyComponent], imports: [CommonModule], exports: [MyComponent] }) export class MyModule {}
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| NgModule-based component | Moderate (due to module wrappers) | 1-2 reflows per module load | Medium paint cost | [X] Bad |
| Standalone component | Minimal (direct component) | Single reflow | Low paint cost | [OK] Good |
standalone: true in an Angular component?standalone: true doesstandalone: true inside the @Component decorator.@Component with standalone: true. Others misuse decorators or omit the flag.standalone: true inside @Component decorator [OK]AppComponent is rendered?@Component({ selector: 'app-root', standalone: true, template: `Hello
`, imports: [ChildComponent] }) export class AppComponent {}
@Component({ selector: 'app-child', standalone: true, template: `Child works!
` }) export class ChildComponent {}imports array, allowing usage in its template.@Component({ selector: 'app-error', standalone: true, template: `Error component
` }) export class ErrorComponent {}
@Component({ selector: 'app-root', standalone: true, template: ``, imports: [ErrorComponent] }) export class AppComponent {}<app-error> but does not import ErrorComponent in its imports array.standalone: true and import it in each component's imports array where used. uses standalone: true and imports the button in each component, avoiding NgModules.