如何调试慢烬CLI/西兰花构建



我的Ember CLI项目目前需要8-9秒来构建,我想了解为什么。项目不是那么大(app/下约180个文件,包括hbs和scss)。

这是我的brocfile: https://gist.github.com/samselikoff/874c90758bb2ce0bb210

然而,即使我注释了整个Brocfile并只导出app变量,构建仍然需要5-6秒。

我不太确定如何调试。这是我最慢的树日志:

构建成功- 8874ms.

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

UPDATE:如果您使用的是ember-cli 0.1.0或更新版本,则可能不需要此hack。ember-cli现在符号链接文件,而不是复制。可能仍然可以在windows或慢速磁盘上获得性能改进。


Broccoli (ember-cli使用)将其临时状态存储在文件系统中,因此它非常依赖文件I/O。尽量减少public/vendor/bower_components/目录中的文件数量。这些文件夹中的所有文件将在每个重建周期中至少复制一次。文件夹中文件的大小和数量对性能影响很大。

实际上,每次更改文件时,broccoli都在<ember app>/tmp/内的许多目录之间复制文件。在bower_components/目录的情况下,它似乎复制每个文件不止一次。它需要这样做,因为您可能在Brocfile.js中使用app.import('some.js'),也可能在SASS/LESS文件中使用@import "some.scss"。没有办法知道哪些文件是你真正需要的,所以它复制所有的文件。

如果您从bower_components/vendor/中删除您不需要的文件,您将注意到更好的构建时间。

一个真实世界的例子

如果您安装了highcharts.com#3.0.5 bower依赖,您还可以在bower_components/目录中获得2829个文件(198MB)的特殊礼物。想象一下那里发生的不必要的文件系统读取和复制。

下面是我清理的目录结构的片段:

$ 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秒减少到600ms。使用符号链接代替复制显示出巨大的改进。

对于我们这些拥有大型应用程序,许多底层和许多哭泣的团队成员的人来说,现在需要一个解决方案:

临时解决方案

保持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时,您可能会将所有额外的cruft返回到您的目录中。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/

除了@tstirrat的回答:

只有以管理员身份运行才允许您使用符号链接文件(默认SeCreateSymbolicLinkPrivilege标志)尝试运行cmd(或PowerShell)作为管理员,看看是否有帮助。

您可以使用Local Policies配置允许特定用户使用。

答案摘自此处

相关内容

  • 没有找到相关文章