ember-cli broccolijs

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 .

Respuesta tomada desde aquí


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/