2014-07-16 11 views
17

Il progetto My Ember CLI richiede attualmente 8-9 secondi per la creazione e mi piacerebbe capire perché. Il progetto non è così grande (~ 180 file sotto app/ compresi hbs e scss).Come eseguire il debug delle build di Ember CLI/Broccoli

Ecco la mia brocfile: https://gist.github.com/samselikoff/874c90758bb2ce0bb210

Tuttavia, anche se io commento la mia intera Brocfile fuori e l'esportazione solo la variabile app, la build vuole ancora 5-6 secondi.

Non sono abbastanza sicuro di come eseguire il debug. Ecco i registri degli alberi più lenti:

Creazione riuscita - 8874 ms.

Slowest Trees     | Total   
-------------------------------+---------------- 
TreeMerger (appAndDependencies)| 1286ms   
TreeMerger (vendor)   | 1275ms   
CompassCompiler    | 1204ms   
StaticCompiler     | 1185ms   
TreeMerger (stylesAndVendor) | 1151ms   
TreeMerger (allTrees)   | 706ms   
StaticCompiler     | 625ms  
+1

Sei per caso in esecuzione Windows? Ho avuto un problema in cui le build richiedevano fino a 20 secondi per il completamento e il mio progetto è minuscolo. Si è scoperto che era il mio Virus Scanner che interferiva con la build. Dai un'occhiata a [questo thread] (https://github.com/broccolijs/broccoli/issues/39) su Github per maggiori informazioni. – sonikarc

+0

@sonikarc nope, mac. Ty for link –

risposta

14

UPDATE: Se si utilizza la versione 0.1.0 ember-cli o più recente, questo hack non è probabilmente necessario. ember-cli ora symlinks files invece di copiare. È maggio ottenere un miglioramento delle prestazioni su Windows o dischi lenti.


Broccoli (usato da ember-cli) memorizza il suo stato temporaneo nel file system, quindi è molto file di I/O dipendenti. Prova a ridurre il numero di file nelle directory public/, vendor/ e bower_components/. Tutti i file all'interno di queste cartelle verranno copiati almeno una volta per ciclo di ricostruzione. Le dimensioni e il numero di file nelle cartelle influiscono notevolmente sulle prestazioni.

In sostanza, ogni volta che si modifica un file, broccoli copia i file tra le numerose directory all'interno di <ember app>/tmp/. Nel caso della tua dir bower_components/, sembra che copi ogni singolo file più di una volta. Deve farlo perché potresti usare app.import('some.js') nel tuo Brocfile.js, potresti anche @import "some.scss" in file SASS/LESS. Non c'è modo di sapere quali file sono effettivamente necessari, quindi li copia tutti.

Se si rimuovono i file che si non hai bisogno di da bower_components/ e vendor/, si noterà meglio il tempo di compilazione.

un mondo reale esempio

Se si installa la pergola dipendenze highcharts.com#3.0.5, si ottiene anche un dono speciale di 2829 file (198MB) nel vostro bower_components/ dir. Immagina le letture e le copie del file system non necessarie che stanno accadendo lì.

Ecco un frammento della mia struttura dir puliti:

$ find bower_components -type f | grep highcharts 
bower_components/highcharts.com/js/highcharts-more.src.js 
bower_components/highcharts.com/js/highcharts.src.js 

Si noti che solo i file .js rimangono, ho tolto tutto il resto. Sono 2827 file rimossi. Highcharts è un esempio estremo, ma la maggior parte delle tue dipendenze ha 5 volte il numero di file di cui hai effettivamente bisogno.

futuro positivo avanti

Il team ember-cli sono al lavoro migliorando le prestazioni dell'ecosistema broccoli sottostante. Il lavoro has already begun e alcune app del mondo reale (con alberi di grandi dimensioni) vedono miglioramenti delle prestazioni riducendo il tempo di ricostruzione da 4 secondi a 600 ms. Utilizzando symlinks instead of copying sta mostrando miglioramenti drastici.

Per quelli di noi che hanno applicazioni su larga scala, un sacco di dipendenze Bower e molti membri del team che piangono, che hanno bisogno di una soluzione ora:

Una soluzione temporanea

Un modo per mantenere il vostro bower_components/ clean, serve per controllare le dipendenze nel controllo di versione. Questo consente di utilizzare git clean per potare la directory con facilità:

bower install —-save d3 
git add -—force bower_components/d3/d3.js # force, because bower_components/ is gitignored 
git commit -m "Added d3.js" 

// Brocfile.js 
app.import('bower_components/d3/d3.js'); 

Ogni volta che fate un bower install è probabile ottenere tutte le cruft più indietro nella vostra dir. git clean facilmente rimuove non Versione file controllati:

git clean -f -d -x bower_components/ 
ember serve 

Dopo aver fatto questo, ci sono voluti un unico ricostruzione (il tempo di costruire, dopo la modifica di un file) da 20 secondi fino a 3,5 secondi (abbiamo una abbastanza grande app).

Se andate su questa strada, non dimenticare le dipendenze Bower necessari Ember:

bower_components/ember/ember.js 
bower_components/ember/ember.prod.js 
bower_components/ember-cli-shims/app-shims.js 
bower_components/ember-cli-test-loader/test-loader.js 
bower_components/ember-data/ember-data.js 
bower_components/ember-data/ember-data.prod.js 
bower_components/ember-load-initializers/ember-load-initializers.js 
bower_components/ember-resolver/dist/modules/ember-resolver.js 
bower_components/jquery/dist/jquery.js 
bower_components/loader/loader.js 
bower_components/handlebars/handlebars.js 
bower_components/handlebars/handlebars.runtime.js 

Ecco il comando git per voi:

bower install 
git add -f bower_components/ember/ember.js bower_components/ember/ember.prod.js bower_components/ember-cli-shims/app-shims.js bower_components/ember-cli-test-loader/test-loader.js bower_components/ember-data/ember-data.js bower_components/ember-data/ember-data.prod.js bower_components/ember-load-initializers/ember-load-initializers.js bower_components/ember-resolver/dist/modules/ember-resolver.js bower_components/jquery/dist/jquery.js bower_components/loader/loader.js bower_components/handlebars/handlebars.js bower_components/handlebars/handlebars.runtime.js 
git commit -m "Added ember-cli dependencies" 
git clean -f -d -x bower_components/ 
+1

Dopo avermi indirizzato su questo argomento su IRC, ho creato uno script che sostanzialmente raggiunge lo stesso senza inquinare il repository git. Ha anche un po 'di magia per mantenere automaticamente i file importati da Brocfile.js. Potete vedere qui: https://gist.github.com/dschmidt/a68747348036fd6aa989 (Sì, sono totalmente schifo a script bash: P) –

+0

Il mio assumere su @ https sceneggiatura di DominikSchmidt: //gist.github .com/wrenoud/784dfcff244265f9593b Mi piace non inquinare il repository. – Weston

+0

Wait Trovato il tuo altro post, quindi proverò 'cmd> nodo C:/my/ember-cli/project/path/clean_ember-cli.js' –

0

Oltre a @ di tstirrat risposta:

Solo in esecuzione come amministratore consentirà di utilizzare file di symlinks (flag SeCreateSymbolicLinkPrivilege predefinito) provare a eseguire cmd (o PowerShell) come amministratore e vedere se aiuta.

È possibile consentirlo per utente specifico utilizzando la configurazione Local Policies.

Answer taken from here