Performance: Shared modules for reusable components
MEDIUM IMPACT
This affects initial page load speed and bundle size by controlling how reusable components are loaded and shared across the app.
import { CommonModule } from '@angular/common'; import { ComponentA } from './component-a.component'; @NgModule({ declarations: [ComponentA], imports: [CommonModule], exports: [ComponentA] }) export class SharedModule {} @NgModule({ imports: [CommonModule, SharedModule] }) export class FeatureModule1 {} @NgModule({ imports: [CommonModule, SharedModule] }) export class FeatureModule2 {}
import { CommonModule } from '@angular/common'; import { ComponentA } from './component-a.component'; @NgModule({ declarations: [ComponentA], imports: [CommonModule], exports: [ComponentA] }) export class FeatureModule1 {} @NgModule({ declarations: [ComponentA], imports: [CommonModule], exports: [ComponentA] }) export class FeatureModule2 {}
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Duplicate component declarations in multiple modules | No extra DOM nodes but duplicated JS code | No direct reflows caused | Increased paint cost due to slower JS execution | [X] Bad |
| Single shared module for reusable components | No extra DOM nodes, shared JS code | No direct reflows caused | Lower paint cost due to smaller JS bundle | [OK] Good |