[FR] Qu'est ce que le changement de cap d'Angular 15+ a apporter

benjamin duroule - Feb 20 - - Dev Community

Lors de l’Angular Connect 2023, Google a confirmé un tournant majeur dans l’évolution d’Angular, amorcé dès la version 15. L’objectif est de moderniser le framework pour le rendre plus léger, plus rapide et plus simple à utiliser.

Avec l’introduction des Standalone Components, d’un nouveau modèle de réactivité avec Signals et d’un système de build ultra-performant grâce à Esbuild et Vite, Angular adopte une approche plus fluide et plus en phase avec les standards du web moderne.

Standalone Components : une refonte de l’architecture

Depuis ses débuts, Angular reposait sur un système modulaire où chaque composant était déclaré dans un NgModule, définissant les dépendances et l’organisation de l’application.

À partir d’Angular 14, il est devenu possible de créer des Standalone Components, qui fonctionnent sans NgModule. Cette nouvelle approche réduit la complexité, facilite l’importation des composants et simplifie la structure des applications.

Avant Angular 15 :

@NgModule({
  declarations: [MyComponent],
  imports: [CommonModule],
  exports: [MyComponent]
})
export class MyModule {}
Enter fullscreen mode Exit fullscreen mode

Image description

Avec Angular 17 :

@Component({
  standalone: true,
  imports: [CommonModule],
  selector: 'app-my-component',
  template: `<h2>Standalone Component</h2>`
})
export class MyComponent {}
Enter fullscreen mode Exit fullscreen mode

Image description

Ce changement marque une véritable révolution dans l’architecture d’Angular, initialement pensée pour des projets de grande envergure et souvent jugée trop complexe.

En remplaçant progressivement NgModule, Google allège le framework et lui permet de se rapprocher de ses concurrents comme React et Vue, où l’approche par composants autonomes est la norme.

Signals : une réactivité plus performante

Tandis que les Standalone Components repensent l’architecture d’Angular, les Signals révolutionnent la gestion de la réactivité.

Jusqu’à Angular 16, Angular utilisait Zone.js pour détecter les événements asynchrones et déclencher un cycle de Change Detection, entraînant un re-scanning de l’ensemble de l’arbre des composants. Si cette approche fonctionnait bien, elle pouvait être coûteuse en ressources, notamment dans les applications complexes.

Avec les Signals, Angular adopte un modèle réactif plus précis et performant. Plutôt que de re-scanner toute l’interface, seuls les composants réellement impactés sont mis à jour, réduisant ainsi la charge sur le moteur de rendu et améliorant significativement les performances.

import { signal } from '@angular/core';

export class CounterComponent {
  count = signal(0); // Création d’un signal avec une valeur initiale

  increment() {
    this.count.update(value => value + 1); // Mise à jour du Signal
  }
}
Enter fullscreen mode Exit fullscreen mode
<p>Compteur : {{ count() }}</p>
<button (click)="increment()">+1</button>
Enter fullscreen mode Exit fullscreen mode

En complément, Google introduit computed et effect pour réagir aux changements de données.

  • computed crée des valeurs dérivées d’un signal, mises à jour automatiquement.
  • effect exécute une action dès qu’un Signal change. Exemple d’un composant calculant automatiquement un pourcentage et l'affichant dans la console :
export class PercentageComponent {
  // Valeurs réactives (Signals)
  currentValue = signal(30);
  totalValue = signal(100);

  // Calcul automatique du pourcentage
  percentage = computed(() => 
    this.totalValue() === 0 ? 0 : (this.currentValue() / this.totalValue()) * 100
  );

  constructor() {
    effect(() => {
      console.log("Nouvelle valeur du pourcentage :", this.percentage());
    });
  }

  // Augmenter la valeur actuelle
  increase() {
    this.currentValue.update(value => Math.min(value + 10, this.totalValue()));
  }
}
Enter fullscreen mode Exit fullscreen mode

Grâce à cette transition, Angular adopte un modèle réactif plus performant, s’inspirant de frameworks comme SolidJS et React, où le rendu est optimisé à un niveau de granularité très fin.

Typed Forms : une meilleure intégration avec TypeScript

Avant Angular 14, les Reactive Forms n’étaient pas entièrement typés. Les valeurs des FormControl étaient de type any, ce qui pouvait entraîner des erreurs de typage et réduire la fiabilité du code.

Avec les Typed Forms, Google renforce la sécurité et la robustesse du framework, tout en offrant une meilleure intégration avec TypeScript.

export class UserFormComponent {
  userForm = new FormGroup({
    name: new FormControl<string>(''),
    age: new FormControl<number | null>(null),
  });

  submit() {
    console.log(this.userForm.value); 
  }
}
Enter fullscreen mode Exit fullscreen mode

Avec cette approche, Angular réduit les erreurs de typage et offre une autocomplétion améliorée dans les IDE.

Esbuild & Vite : un boost de vitesse

Avec Angular 17, Google remplace Webpack par Esbuild et Webpack Dev Server par Vite pour optimiser le développement et la production.

Esbuild offre un build jusqu’à dix fois plus rapide grâce à une compilation multithread ultra-optimisée.
Vite permet un démarrage quasi-instantané du serveur de développement et un rechargement à chaud beaucoup plus efficace.
Cette transition réduit considérablement les temps de compilation, facilite le développement local et améliore l’expérience développeur.

Conclusion : un Angular plus rapide, plus simple et plus moderne

Avec Angular 17, Google transforme progressivement son framework vers une approche plus moderne et performante.

Les Standalone Components simplifient l’architecture, les Signals optimisent la réactivité et Esbuild et Vite accélèrent le build et le développement.

Mais cette transition ne fait que commencer. L’abandon progressif de Zone.js, l’amélioration des Typed Forms et l’évolution du modèle réactif vers un système plus proche de SolidJS et React dessinent déjà le futur d’Angular.

Avec ces innovations, Angular ne se contente plus de suivre l’évolution du web moderne. Il s’impose comme une alternative plus puissante et plus flexible que jamais.

. . .