Qu'est-ce que les budgets CLI angulaires?
Les budgets sont l'une des fonctionnalités les moins connues de la CLI angulaire. C'est une fonctionnalité plutôt petite mais très intéressante!
Au fur et à mesure que les applications se développent en fonctionnalités, elles augmentent également en taille. Budgets est une fonctionnalité de la CLI angulaire qui vous permet de définir des seuils budgétaires dans votre configuration pour garantir que certaines parties de votre application restent dans les limites que vous définissez - Documentation officielle
Ou en d'autres termes, nous pouvons décrire notre application Angular comme un ensemble de fichiers JavaScript compilés appelés bundles qui sont produits par le processus de construction. Les budgets angulaires nous permettent de configurer les tailles attendues de ces bundles. De plus, nous pouvons configurer des seuils pour les conditions lorsque nous voulons recevoir un avertissement ou même échouer la construction avec une erreur si la taille du bundle devient trop incontrôlable!
Comment définir un budget?
Les budgets angulaires sont définis dans le fichier angular.json. Les budgets sont définis par projet, ce qui est logique car chaque application d'un espace de travail a des besoins différents.
En pensant de manière pragmatique, il est logique de définir des budgets pour les versions de production. Prod build crée des bundles avec la «vraie taille» après avoir appliqué toutes les optimisations telles que le tremblement d'arbre et la minimisation du code.
Oups, une erreur de construction! La taille maximale du bundle a été dépassée. C'est un excellent signal qui nous dit que quelque chose s'est mal passé…
- Nous avons peut-être expérimenté notre fonctionnalité et n'avons pas nettoyé correctement
- Notre outillage peut mal tourner et effectuer une mauvaise importation automatique, ou nous choisissons le mauvais article dans la liste suggérée d'importations
- Nous pourrions importer des éléments à partir de modules paresseux dans des emplacements inappropriés
- Notre nouvelle fonctionnalité est vraiment grande et ne rentre pas dans les budgets existants
Première approche: vos fichiers sont-ils gzippés?
De manière générale, le fichier gzippé n'a qu'environ 20% de la taille du fichier d'origine, ce qui peut considérablement réduire le temps de chargement initial de votre application. Pour vérifier si vous avez gzippé vos fichiers, ouvrez simplement l'onglet réseau de la console développeur. Dans les "En-têtes de réponse", si vous voyez "Content-Encoding: gzip", vous êtes prêt à partir.
Comment gzip?
Si vous hébergez votre application Angular sur la plupart des plates-formes cloud ou CDN, ne vous inquiétez pas de ce problème car ils l'ont probablement géré pour vous. Cependant, si vous avez votre propre serveur (tel que NodeJS + expressJS) servant votre application Angular, vérifiez définitivement si les fichiers sont gzippés. Voici un exemple pour gzip vos actifs statiques dans une application NodeJS + expressJS. Vous pouvez difficilement imaginer que cette simple «compression» middleware réduirait la taille de votre bundle de 2,21 Mo à 495,13 Ko.
const compression = require('compression')
const express = require('express')
const app = express()
app.use(compression())
Deuxième approche :: Analysez votre bundle angulaire
Si la taille de votre bundle devient trop grande, vous voudrez peut-être analyser votre bundle car vous avez peut-être utilisé un package tiers de grande taille inapproprié ou vous avez oublié de supprimer un package si vous ne l'utilisez plus. Webpack a une fonctionnalité étonnante pour nous donner une idée visuelle de la composition d'un bundle webpack.
C'est super facile d'obtenir ce graphique.
npm install -g webpack-bundle-analyzer
- Dans votre application Angular, exécutez
ng build --stats-json
(n'utilisez pas d'indicateur --prod
). En activant, --stats-json
vous obtiendrez un fichier supplémentaire stats.json
- Enfin, exécutez
webpack-bundle-analyzer ./dist/stats.json
et votre navigateur affichera la page à localhost: 8888. Aie du plaisir avec ça.
ref 1: Comment les budgets CLI angulaires ont-ils sauvé ma journée et comment ils peuvent vous sauver la vôtre
ref 2: Optimiser la taille du bundle angulaire en 4 étapes