更新:如果您使用的是ember-cli
0.1.0 或更高版本,则可能不需要此 hack。ember-cli
现在符号链接文件而不是复制。您可能仍会在 Windows 或慢速磁盘上获得性能改进。
Broccoli(由 使用ember-cli
)将其临时状态存储在文件系统中,因此它非常依赖于文件 I/O。尝试减少public/
,vendor/
和bower_components/
目录中的文件数量。这些文件夹中的所有文件将在每个重建周期中至少复制一次。文件夹中文件的大小和数量会极大地影响性能。
本质上,每次更改文件时,broccoli 都会在<ember app>/tmp/
. 就您的目录而言,它似乎不止一次bower_components/
地复制每个文件。它需要这样做,因为您可能会在您的,您也可能在 SASS/LESS 文件中使用。无法知道您实际需要哪些文件,因此它会复制所有文件。app.import('some.js')
Brocfile.js
@import "some.scss"
如果您从和中删除不需要的文件,您会发现构建时间更好。bower_components/
vendor/
一个真实世界的例子
如果您安装了highcharts.com#3.0.5
bower 依赖项,您还会在您的目录中获得 2829 个文件 (198MB) 的特殊礼物bower_components/
。想象一下那里发生的不必要的文件系统读取和复制。
这是我清理的目录结构的片段:
$ find bower_components -type f | grep highcharts
bower_components/highcharts.com/js/highcharts-more.src.js
bower_components/highcharts.com/js/highcharts.src.js
请注意,仅.js
保留文件,我删除了其他所有内容。那是 2827 个已删除的文件。Highcharts 是一个极端的例子,但您的大多数依赖项的文件数量是您实际需要的 5 倍。
未来积极向上
该ember-cli
团队正在努力提高底层西兰花生态系统的性能。工作已经开始,一些现实世界的应用程序(带有大树)正在看到性能改进,将重建时间从 4 秒减少到 600 毫秒。使用符号链接而不是复制显示出巨大的改进。
对于我们这些拥有大型应用程序、大量 Bower 部门和许多哭泣的团队成员,他们现在需要一个解决方案:
临时解决方案
保持bower_components/
清洁的一种方法是将依赖项检查到版本控制中。这使您可以使用git clean
轻松修剪目录:
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');
每次你做一个bower install
你可能会在你的目录中得到所有额外的东西。git clean
轻松删除非版本控制文件:
git clean -f -d -x bower_components/
ember serve
完成此操作后,一次重建(更改文件后的构建时间)从 20 秒降至 3.5 秒(我们有一个相当大的应用程序)。
如果您确实走这条路,请不要忘记 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
这是给你的 git 命令:
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/