ATTENZIONE nei budget, massimo superato per iniziale


155

Quando costruisco il mio progetto angolare 7 con --prod, ho un avviso nei budget.

Ho un progetto angolare 7, voglio costruirlo, ma ho un avvertimento:

WARNING in budgets, maximum exceeded for initial. Budget 2 MB was exceeded by 1.77 MB

questi sono i dettagli del pezzo:

chunk {scripts} scripts.2cc9101aa9ed72da1ec4.js (scripts) 154 kB  [rendered]
chunk {0} runtime.ec2944dd8b20ec099bf3.js (runtime) 1.41 kB [entry] [rendered]
chunk {1} main.13d1eb792af7c2f359ed.js (main) 3.34 MB [initial] [rendered]
chunk {2} polyfills.11b1e0c77d01e41acbba.js (polyfills) 58.2 kB [initial] [rendered]
chunk {3} styles.33b11ad61bf10bb992bb.css (styles) 379 kB [initial] [rendered]

che cosa sono esattamente i budget? e come dovrei gestirli?


4
Prova a comprimere le tue immagini nelle risorse invece di modificare il file angular.json
Ahsan,

@Ahsan è quello che ho fatto. Sempre lo stesso messaggio. Non sono sicuro che si tratti di risorse.
Emerica,

@Inferme, guarda la mia nuova risposta e controlla i link
Masoud Bimar,

Risposte:


250

Apri il file angular.json e trova la budgetsparola chiave.

Dovrebbe apparire come:

"budgets": [
   {
      "type": "initial",
      "maximumWarning": "2mb",
      "maximumError": "5mb"
   }
]

Come probabilmente hai indovinato, puoi aumentare il maximumWarningvalore per evitare questo avviso, ovvero:

"budgets": [
   {
      "type": "initial",
      "maximumWarning": "4mb", <===
      "maximumError": "5mb"
   }
]

Cosa significano i budget ?

Un budget prestazionale è un gruppo di limiti a determinati valori che influiscono sulle prestazioni del sito, che non possono essere superati nella progettazione e nello sviluppo di alcun progetto web.

Nel nostro caso il budget è il limite per le dimensioni del pacchetto.

Guarda anche:


2
Puoi spiegare cosa significa budget?
Stack Overflow

3
@StackOverflow Aggiunto
yurzui

2
Grazie @yurzui per la tua rapida risposta, è una nuova funzionalità in Angular 7? Non abbiamo visto questo errore nell'angolo 5. Significa che stiamo facendo qualcosa di sbagliato?
Stack Overflow

2
@StackOverflow È stato aggiunto in @angular/cli@7Vedi anche le novità di ng7 qui blog.angular.io/… With v7, we are also defaulting new projects to take advantage of Bundle Budgets in our CLI.
yurzui

23
come ottimizzare per ridurre la dimensione del budget usato? invece di aumentarlo ...
DeadManN,

76

Che cos'è il budget CLI angolare? Il budget è una delle funzionalità meno conosciute della CLI angolare. È una funzionalità piuttosto piccola ma molto accurata!

Man mano che le applicazioni aumentano di funzionalità, aumentano anche di dimensioni. I budget sono una funzionalità dell'interfaccia della riga di comando angolare che consente di impostare soglie di budget nella configurazione per garantire che parti dell'applicazione rimangano entro i limiti impostati - Documentazione ufficiale

O in altre parole, possiamo descrivere la nostra applicazione angolare come un insieme di file JavaScript compilati chiamati bundle che sono prodotti dal processo di compilazione. I budget angolari ci consentono di configurare le dimensioni previste di questi pacchetti. Inoltre, possiamo configurare le soglie per le condizioni in cui desideriamo ricevere un avviso o addirittura non riuscire a creare un errore se la dimensione del bundle diventa troppo fuori controllo!

Come definire un budget? I budget angolari sono definiti nel file angular.json. I budget sono definiti per progetto, il che ha senso perché ogni app in un'area di lavoro ha esigenze diverse.

Pensando in modo pragmatico, ha senso solo definire budget per le build di produzione. Prod build crea bundle con "dimensioni reali" dopo aver applicato tutte le ottimizzazioni come il tree-shaking e la minimizzazione del codice.

Oops, un errore di build! È stata superata la dimensione massima del pacchetto. Questo è un ottimo segnale che ci dice che qualcosa è andato storto ...

  1. Potremmo aver sperimentato la nostra funzione e non aver pulito correttamente
  2. I nostri strumenti possono andare storti ed eseguire un'importazione automatica errata oppure selezioniamo articoli errati dall'elenco di importazioni suggerito
  3. Potremmo importare cose da moduli pigri in luoghi inappropriati
  4. La nostra nuova funzionalità è davvero grande e non si adatta ai budget esistenti

Primo approccio: i tuoi file sono compressi con zip?

In generale, il file gzipped ha solo circa il 20% delle dimensioni del file originale, il che può ridurre drasticamente il tempo di caricamento iniziale della tua app. Per verificare se hai decompresso i tuoi file, basta aprire la scheda di rete della console per sviluppatori. Nelle "Header di risposta", se dovresti vedere "Codifica del contenuto: gzip", sei a posto.

Come decomprimere? Se ospiti la tua app Angular nella maggior parte delle piattaforme cloud o CDN, non dovresti preoccuparti di questo problema poiché probabilmente hanno gestito questo per te. Tuttavia, se hai il tuo server (come NodeJS + expressJS) che serve la tua app Angular, controlla sicuramente se i file sono compressi con gzip. Di seguito è riportato un esempio per decomprimere le risorse statiche in un'app NodeJS + expressJS. Difficilmente si può immaginare che questa semplice "compressione" del middleware ridurrebbe le dimensioni del bundle da 2,21 MB a 495,13 KB.

const compression = require('compression')
const express = require('express')
const app = express()
app.use(compression())

Secondo approccio: analizzare il fascio angolare

Se la dimensione del pacchetto diventa troppo grande, potresti voler analizzare il pacchetto perché potresti aver utilizzato un pacchetto di terze parti inappropriato di grandi dimensioni o hai dimenticato di rimuovere un pacchetto se non lo usi più. Webpack ha una straordinaria funzionalità per darci un'idea visiva della composizione di un pacchetto webpack.

inserisci qui la descrizione dell'immagine

È super facile ottenere questo grafico.

  1. npm install -g webpack-bundle-analyzer
  2. Nella tua app Angular, esegui ng build --stats-json(non utilizzare flag --prod). Abilitando --stats-jsonotterrai un file aggiuntivo stats.json
  3. Infine, esegui webpack-bundle-analyzer ./dist/stats.jsone il tuo browser farà apparire la pagina su localhost: 8888. Divertiti con esso.

riferimento 1: In che modo i budget CLI angolari hanno salvato la mia giornata e come possono salvare i tuoi

rif 2: Ottimizza la dimensione del fascio angolare in 4 passaggi


Dove metti il ​​codice di "compressione" che hai fornito nella tua app angolare?
F3L1X79,

1
Se usi qzip nel progetto nodejs, vedi questo link , per il progetto angolare puoi semplicemente abilitarlo sul comando build vedi questo link
Masoud Bimar

2
Per eseguire l'analizzatore senza installare il pacchetto a livello globale:npx webpack-bundle-analyzer ./dist/stats.json
michel404,

4
In Angular 9 il comando è ng build --statsJson=true. Vedi Angular 9 Doc
wami,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.