10 astuces pour optimiser les performances d'Angular

Angular Performance Optimisation

Les performances sont cruciales pour l’expérience utilisateur. Après 8 ans de développement Angular, voici mes techniques les plus efficaces pour optimiser vos applications.

1. OnPush Change Detection

La stratégie OnPush réduit considérablement le nombre de vérifications de changement. Utilisez-la partout où c’est possible :

@Component({
  selector: 'app-my-component',
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class MyComponent {}

2. TrackBy dans les NgFor

Sans trackBy, Angular recrée tous les éléments DOM à chaque changement. Avec trackBy, il ne met à jour que ce qui a changé :

trackByFn(index: number, item: any): number {
  return item.id;
}

3. Lazy Loading des modules

Divisez votre application en modules chargés à la demande. Cela réduit drastiquement le bundle initial :

const routes: Routes = [
  {
    path: 'admin',
    loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule)
  }
];

4. Optimisation du Bundle avec Webpack

Analysez votre bundle avec webpack-bundle-analyzer et éliminez les dépendances inutiles. Utilisez le tree-shaking efficacement.

5. Virtual Scrolling pour les longues listes

Pour les listes de milliers d’éléments, le virtual scrolling est indispensable :

<cdk-virtual-scroll-viewport itemSize="50">
  <div *cdkVirtualFor="let item of items">{{ item }}</div>
</cdk-virtual-scroll-viewport>

6. Optimisation des Observables

Utilisez les opérateurs RxJS judicieusement. shareReplay() évite les appels HTTP redondants :

this.data$ = this.http.get('/api/data').pipe(
  shareReplay(1)
);

7. Preload Strategy

Implémentez une stratégie de preload personnalisée pour charger les modules en arrière-plan :

@NgModule({
  imports: [RouterModule.forRoot(routes, {
    preloadingStrategy: PreloadAllModules
  })]
})

8. Optimisation des images

Utilisez les directives natives d’Angular pour l’optimisation d’images (v15+) :

<img ngSrc="hero.jpg" width="400" height="300" priority>

9. Web Workers pour les calculs lourds

Déportez les calculs intensifs dans un Web Worker pour ne pas bloquer le thread principal.

10. Profiling avec Chrome DevTools

Utilisez régulièrement le profiler pour identifier les goulots d’étranglement. Mesurez, ne supposez pas !

Conclusion

Ces techniques m’ont permis de passer de scores Lighthouse de 60-70 à 95-100 sur plusieurs projets en production. L’important est de mesurer l’impact de chaque optimisation.

Temps de lecture : 6 minutes

← Retour au blog