首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试运行缓慢的Ember CLI/Broccoli版本

如何调试运行缓慢的Ember CLI/Broccoli版本
EN

Stack Overflow用户
提问于 2014-07-16 21:45:12
回答 2查看 3.3K关注 0票数 17

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

这是我的浏览文件:https://gist.github.com/samselikoff/874c90758bb2ce0bb210

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

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

构建成功- 8874ms。

代码语言:javascript
复制
Slowest Trees                  | Total          
-------------------------------+----------------
TreeMerger (appAndDependencies)| 1286ms         
TreeMerger (vendor)            | 1275ms         
CompassCompiler                | 1204ms         
StaticCompiler                 | 1185ms         
TreeMerger (stylesAndVendor)   | 1151ms         
TreeMerger (allTrees)          | 706ms          
StaticCompiler                 | 625ms    
EN

回答 2

Stack Overflow用户

发布于 2014-09-26 01:42:43

更新:如果您使用的是ember-cli 0.1.0或更高版本,则可能没有必要进行此攻击。ember-cli现在是symlinks files,而不是复制。在windows或较慢的磁盘上,您可能仍会获得性能改进。

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

从本质上讲,每次你改变一个文件,花椰菜都会在<ember app>/tmp/内的许多目录之间复制文件。在您的bower_components/目录中,它似乎多次复制每个单独的文件。它需要这样做,因为你可能在你的Brocfile.js中使用app.import('some.js'),你也可能在SASS/ @import "some.scss"文件中使用。没有办法知道您实际需要哪些文件,所以它会复制所有这些文件。

如果从bower_components/vendor/中删除不需要的文件,您会注意到构建时间缩短了。

一个真实的示例

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

下面是我清理过的dir结构的一个片段:

代码语言:javascript
复制
$ 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团队正在努力提高底层西兰花生态系统的性能。Work has already begun和一些现实世界的应用程序(带有大树)的性能得到了提高,重建时间从4秒减少到600ms。使用symlinks instead of copying正在显示出巨大的改进。

对于我们这些拥有大型应用程序的人来说,现在需要解决方案的人很多,有很多高级员工,还有很多爱哭的团队成员

A临时解决方案

保持bower_components/干净的一种方法是将依赖项签入到版本控制中。这使您可以使用git clean轻松修剪目录:

代码语言:javascript
复制
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,你很可能会在你的dir中得到所有额外的麻烦。git clean可以轻松删除非版本控制的文件:

代码语言:javascript
复制
git clean -f -d -x bower_components/
ember serve

这样做之后,从20秒减少到3.5秒(我们有一个相当大的应用程序),只用了一次重建(更改文件后的构建时间)。

如果你真的走了这条路,别忘了Ember需要的bower deps:

代码语言:javascript
复制
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命令:

代码语言:javascript
复制
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/
票数 15
EN

Stack Overflow用户

发布于 2015-01-19 17:55:45

除了@tstirrat的回答之外:

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

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

Answer taken from here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24782479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档