Pour écrire cet article, ils ont été encouragés par la recherche de développeurs front-end JavaScript dans leur entreprise à Stavropol. Parce que Pendant longtemps, il n'a pas été possible de trouver un programmeur intelligent, puis nous avons décidé de lancer un programme de stage avec beaucoup de matériel de formation sur Angular & JS.
Ceci est une traduction d'un article de Vamsi Vempati sur son expérience avec une application à grande échelle pour Trade Me écrite en angulaire.
À ce jour, j'ai déjà travaillé quelques années sur une application angulaire à grande échelle chez Trade Me. Au cours des dernières années, notre équipe a affiné notre application en termes de normes d'écriture de code et de performances pour la mettre au meilleur état possible.
L'article décrit les méthodes que nous utilisons dans notre projet. Le texte est principalement associé à Angular, TypeScript, RxJs et @ ngrx / store.
De plus, quelques directives générales pour l'écriture de code qui aideront à rendre l'application plus «propre» et lisible seront prises en compte.
1) trackBy
Lorsque vous utilisez 
ngFor pour boucler un tableau dans des modèles, reportez-vous à la fonction 
trackBy , qui renverra un identifiant unique pour chaque élément.
Pourquoi?
Lorsque le tableau change, Angular redessine complètement l'arborescence DOM. Mais si vous utilisez la fonction 
trackBy , Angular comprendra quel élément a changé, puis apportera des modifications au DOM uniquement pour cet élément particulier.
Remarque: une description plus détaillée se trouve 
dans l'article de Nathanel Bazal. [eng]
À
 <li *ngFor="let item of items;">{{ item }}</li> 
Après
 
2) const ou let?
Lors de la déclaration de variables, utilisez 
const si elles ne seront pas réaffectées.
Pourquoi?
L'utilisation de let et const, le cas échéant, rend la raison de la déclaration des variables plus compréhensible. Il peut également aider à identifier les problèmes lorsqu'une valeur est réaffectée au hasard à une constante en raison d'une erreur de compilation. Il améliore également la lisibilité du code.
À
 let car = 'ludicrous car'; let myCar = `My ${car}`; let yourCar = `Your ${car}`; if (iHaveMoreThanOneCar) { myCar = `${myCar}s`; } if (youHaveMoreThanOneCar) { yourCar = `${youCar}s`; } 
Après
 
3) Opérateurs semblables à des tuyaux
Utilisez des instructions de type pipe lorsque vous travaillez avec des 
RxJs .
Les opérateurs de type pipe incluent uniquement le code qui doit être exécuté lors de l'importation.
Cela facilite également la recherche d'instructions inutilisées dans les fichiers.
Remarque: Angular 5.5 et supérieur est nécessaire.
À
 import 'rxjs/add/operator/map'; import 'rxjs/add/operator/take'; iAmAnObservable .map(value => value.item) .take(1); 
Après
 import { map, take } from 'rxjs/operators'; iAmAnObservable .pipe( map(value => value.item), take(1) ); 
4) Connectez-vous au modèle
Évitez de vous abonner à des objets surveillés à partir de composants - au lieu de cela, abonnez-vous à partir d'un modèle.
Pourquoi?
async flux 
async sont automatiquement désabonnés, ce qui simplifie le code et élimine la nécessité d'une gestion manuelle des abonnements. Le risque de désinscription accidentelle dans un composant est également réduit, ce qui entraînera une fuite de mémoire. Cela peut être résolu en utilisant la règle lint pour détecter les objets observés non signés.
De plus, il ne permet pas aux composants de rester statiques et ajoute des erreurs lorsque les données changent en dehors de l'abonnement.
À
 
Après
 
5) Effacer les abonnements
Lorsque vous vous abonnez à des objets surveillés, assurez-vous toujours de vous désabonner de manière appropriée à l'aide des opérateurs tels que 
take , 
takeUntil , etc.
Pourquoi?
Les erreurs de désinscription des objets observés entraîneront une fuite de mémoire indésirable, car le flux observé reste ouvert, probablement même après la suppression du composant ou lorsque l'utilisateur passe à une autre page.
De plus, créez une règle de 
lint pour détecter les objets observables à partir desquels il n'y a pas de désinscription.
À
 iAmAnObservable .pipe( map(value => value.item) ) .subscribe(item => this.textToDisplay = item); 
Après
 private _destroyed$ = new Subject(); public ngOnInit (): void { iAmAnObservable .pipe( map(value => value.item)  
Utilisation de 
takeUntil pour écouter les modifications jusqu'à ce qu'un autre objet observé renvoie une valeur:
 iAmAnObservable .pipe( map(value => value.item), take(1), takeUntil(this._destroyed$) ) .subscribe(item => this.textToDisplay = item); 
Notez l'utilisation de 
takeUntil avec 
take dans l'exemple ci-dessus. Cela évite les fuites de mémoire causées par le fait qu'aucune valeur n'a été affectée à l'abonnement avant la suppression du composant.
Sans 
takeUntil abonnement sera toujours dans un état suspendu, jusqu'à ce qu'il reçoive sa première valeur, mais puisque le composant a déjà été supprimé, il ne recevra jamais la valeur, ce qui entraînera une fuite de mémoire.
6) Chargement paresseux
Dans la mesure du possible, essayez de charger les modules dans une application 
Angular uniquement lorsqu'ils sont en cours d'utilisation.
Pourquoi?
Cela réduira la taille de l'application téléchargée et raccourcira son temps de chargement.
À
 
Après
 
Suite de la traduction dans le prochain article. Si quelqu'un ne veut pas attendre, voici un 
lien vers l'article d'origine.