ember cli - Cómo depurar CLI de Ember/compilaciones de brócoli lentas
ember-cli broccolijs (2)
Mi proyecto Ember CLI está demorando entre 8 y 9 segundos en construirse, y me gustaría entender por qué. El proyecto no es tan grande (~ 180 archivos en la app/
incluyendo hbs y scss).
Aquí está mi archivo broc: https://gist.github.com/samselikoff/874c90758bb2ce0bb210
Sin embargo, incluso si comento todo mi archivo Brocfile y exporto solo la variable de la app
, la compilación todavía toma de 5 a 6 segundos.
No estoy muy seguro de cómo depurar. Aquí están mis registros de árboles más lentos:
Construir con éxito - 8874ms.
Slowest Trees | Total
-------------------------------+----------------
TreeMerger (appAndDependencies)| 1286ms
TreeMerger (vendor) | 1275ms
CompassCompiler | 1204ms
StaticCompiler | 1185ms
TreeMerger (stylesAndVendor) | 1151ms
TreeMerger (allTrees) | 706ms
StaticCompiler | 625ms
Además de la respuesta de @tstirrat:
Solo ejecutarlo como administrador le permitirá usar los archivos de enlaces simbólicos (bandera predeterminada SeCreateSymbolicLinkPrivilege
) intente ejecutar cmd (o PowerShell) como administrador y ver si ayuda.
Puede permitirlo para un usuario específico utilizando la configuración de Local Policies
.
ACTUALIZACIÓN: si está utilizando ember-cli
versión 0.1.0 o más reciente, es probable que este truco no sea necesario. ember-cli
ahora archivos de enlaces simbólicos en lugar de copiar. Aún puede obtener una mejora de rendimiento en Windows o discos lentos.
El brócoli (utilizado por ember-cli
) almacena su estado temporal en el sistema de archivos, por lo que es muy dependiente de la E / S del archivo. Intente reducir la cantidad de archivos en sus directorios public/
, vendor/
y bower_components/
. Todos los archivos dentro de estas carpetas se copiarán al menos una vez por ciclo de reconstrucción . El tamaño y la cantidad de archivos en las carpetas afectan el rendimiento en gran medida.
Esencialmente, cada vez que cambias un archivo, el brócoli está copiando archivos entre los muchos directorios dentro de <ember app>/tmp/
. En el caso de bower_components/
dir, parece que se está copiando cada archivo más de una vez . Debe hacer esto porque podría usar app.import(''some.js'')
en su Brocfile.js
, también podría @import "some.scss"
en los archivos SASS / LESS. No hay forma de saber qué archivos realmente necesita, por lo que los copia todos.
Si elimina los archivos que no necesita de bower_components/
and vendor/
, notará mejores tiempos de compilación.
Un ejemplo del mundo real.
Si instala la highcharts.com#3.0.5
, también recibirá un regalo especial de 2829 archivos (198MB) en su bower_components/
dir. Imagine las lecturas y copias innecesarias del sistema de archivos que están sucediendo allí.
Aquí hay un fragmento de mi estructura de dir limpiado:
$ find bower_components -type f | grep highcharts
bower_components/highcharts.com/js/highcharts-more.src.js
bower_components/highcharts.com/js/highcharts.src.js
Note que solo quedan los archivos .js
, eliminé todo lo demás. Eso es 2827 archivos eliminados. Highcharts es un ejemplo extremo, pero la mayoría de sus dependencias tienen 5 veces más archivos de los que realmente necesita.
Futuro positivo por delante
El equipo de ember-cli
está trabajando arduamente para mejorar el rendimiento del ecosistema de brócoli subyacente. El trabajo ya comenzó y algunas aplicaciones del mundo real (con grandes árboles) están viendo mejoras en el rendimiento que reducen el tiempo de reconstrucción de 4 segundos a 600 ms. Usar enlaces simbólicos en lugar de copiar está mostrando mejoras drásticas.
Para aquellos de nosotros que tenemos aplicaciones a gran escala, un montón de depresores y muchos miembros del equipo que lloran, que necesitan una solución ahora :
Una solucion temporal
Una forma de mantener sus bower_components/
clean, es verificar las dependencias en el control de versiones. Esto le permite usar git clean
para podar su directorio con facilidad:
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'');
Cada vez que bower install
una bower install
es probable que recuperes todo el crucero adicional en tu directorio. git clean
elimina fácilmente archivos no controlados por versión:
git clean -f -d -x bower_components/
ember serve
Después de hacer esto, tomó una sola reconstrucción (tiempo para construir después de cambiar un archivo) de 20 segundos a 3.5 segundos (tenemos una aplicación bastante grande).
Si sigue este camino, no olvide los depósitos de depósito que Ember necesita:
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
Aquí está el comando git para ti:
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/