J'ai une application simple, initialisée par angular-cli
.
Elle affiche quelques pages relatives à 3 routes. J'ai 3 composants. Sur l'une de ces pages j'utilise lodash
et les modules Angular 2 HTTP pour obtenir des données (en utilisant les Observable
s RxJS, map
et subscribe
). J'affiche ces éléments en utilisant un simple *ngFor
.
Cependant, malgré le fait que mon application soit vraiment simple, j'obtiens un package et des maps très volumineux (à mon avis). Je ne parle pas des versions compressées en gzip mais de la taille avant compression. Cette question est juste une demande de recommandations générales.
Résultats de quelques tests:
ng build
Hash: 8efac7d6208adb8641c1 Temps: 10129ms chunk {0} main.bundle.js, main.bundle.map (main) 18,7 ko {3} [initiale] [rendue]
chunk {1} styles.bundle.css, styles.bundle.map, styles.bundle.map (styles) 155 ko {4} [initiale] [rendue]
chunk {2} scripts.bundle.js, scripts.bundle.map (scripts) 128 ko {4} [initiale] [rendue]
chunk {3} vendor.bundle.js, vendor.bundle.map (vendor) 3,96 Mo [initiale] [rendue]
chunk {4} inline.bundle.js, inline.bundle.map (inline) 0 octets [entrée] [rendue]
Attendez: 10 Mo de bundle vendor pour une application aussi simple?
ng build --prod
Hash: 09a5f095e33b2980e7cc Temps: 23455ms chunk {0} main.6273b0f04a07a1c2ad6c.bundle.js, main.6273b0f04a07a1c2ad6c.bundle.map (main) 18,3 ko {3} [initiale] [rendue]
chunk {1} styles.bfdaa4d8a4eb2d0cb019.bundle.css, styles.bfdaa4d8a4eb2d0cb019.bundle.map, styles.bfdaa4d8a4eb2d0cb019.bundle.map (styles) 154 ko {4} [initiale] [rendue]
chunk {2} scripts.c5b720a078e5464ec211.bundle.js, scripts.c5b720a078e5464ec211.bundle.map (scripts) 128 ko {4} [initiale] [rendue]
chunk {3} vendor.07af2467307e17d85438.bundle.js, vendor.07af2467307e17d85438.bundle.map (vendor) 3,96 Mo [initiale] [rendue]
chunk {4} inline.a345391d459797f81820.bundle.js, inline.a345391d459797f81820.bundle.map (inline) 0 octets [entrée] [rendue]
Attendez encore: une taille de bundle vendor similaire pour prod?
ng build --prod --aot
Hash: 517e4425ff872bbe3e5b Temps: 22856ms chunk {0} main.95eadabace554e3c2b43.bundle.js, main.95eadabace554e3c2b43.bundle.map (main) 130 ko {3} [initiale] [rendue]
chunk {1} styles.e53a388ae1dd2b7f5434.bundle.css, styles.e53a388ae1dd2b7f5434.bundle.map, styles.e53a388ae1dd2b7f5434.bundle.map (styles) 154 ko {4} [initiale] [rendue]
chunk {2} scripts.e5c2c90547f3168a7564.bundle.js, scripts.e5c2c90547f3168a7564.bundle.map (scripts) 128 ko {4} [initiale] [rendue]
chunk {3} vendor.41a6c1f57136df286f14.bundle.js, vendor.41a6c1f57136df286f14.bundle.map (vendor) 2,75 Mo [initiale] [rendue]
chunk {4} inline.97c0403c57a46c6a7920.bundle.js, inline.97c0403c57a46c6a7920.bundle.map (inline) 0 octets [entrée] [rendue]
ng build --aot
Hash: 040cc91df4df5ffc3c3f Temps: 11011ms chunk {0} main.bundle.js, main.bundle.map (main) 130 ko {3} [initiale] [rendue]
chunk {1} styles.bundle.css, styles.bundle.map, styles.bundle.map (styles) 155 ko {4} [initiale] [rendue]
chunk {2} scripts.bundle.js, scripts.bundle.map (scripts) 128 ko {4} [initiale] [rendue]
chunk {3} vendor.bundle.js, vendor.bundle.map (vendor) 2,75 Mo [initiale] [rendue]
chunk {4} inline.bundle.js, inline.bundle.map (inline) 0 octets [entrée] [rendue]
Donc quelques questions pour le déploiement de mon application en prod:
- Pourquoi les bundles vendor sont-ils si énormes?
- Est-ce que l'élagage d'arbre est correctement utilisé par
angular-cli
? - Comment améliorer cette taille de bundle?
- Les fichiers .map sont-ils nécessaires?
- Les fonctionnalités de test sont-elles incluses dans les bundles? Je n'en ai pas besoin en prod.
- Question générale: quels outils sont recommandés pour empaqueter en prod? Peut-être que
angular-cli
(utilisant Webpack en arrière-plan) n'est pas la meilleure option? Peut-on faire mieux?
J'ai cherché de nombreuses discussions sur Stack Overflow, mais je n'ai trouvé aucune question générique.
0 votes
Pour en savoir plus sur l'optimisation de l'application angular 2, consultez ceci : github.com/mgechev/angular-performance-checklist#introduction
1 votes
Mais je ne pense pas que nous devrions nous en faire autant, angular-cli évoluera et les choses seront de mieux en mieux faites. Si vous avez besoin d'une fonctionnalité que angular-cli n'a pas, il suffit de soumettre un problème dans leur dépôt: github.com/angular/angular-cli
0 votes
Alors que je pense que @Timathon a raison à certains égards, si quelqu'un essaie de déployer Angular2 en production, il devrait se préoccuper des tailles des bundles car cela affecte directement les performances de l'application. La liste de contrôle des performances d'Angular est une excellente ressource pour voir ce qui peut être amélioré. L'équipe Angular travaille à réduire les tailles des bundles. Excité de voir où cela va !