为什么ember-cli这么慢

kif*_*ord 8 ember.js ember-cli

我将我的grunt项目迁移到ember-cli,我发现从文件修改到liveload完成的时间很长,大约10分钟.

在我安装了ember-cli-windows,ember-cli-windows-addon之后,没有获得明显的提示.以下是安装ember-cli-windows,ember-cli-windows-addon之后的一个示例输出:

file changed routes\services.js

Build successful - 382781ms.

Slowest Trees                                 | Total
----------------------------------------------+---------------------
Babel                                         | 82175ms
Concat: Vendor                                | 75980ms
Funnel: App JS Files                          | 57393ms
JSHint app- QUnit                             | 49491ms
ES6: App Tree                                 | 41827ms

Slowest Trees (cumulative)                    | Total (avg)
----------------------------------------------+---------------------
Babel (2)                                     | 82394ms (41197 ms)
Concat: Vendor (1)                            | 75980ms
Funnel: App JS Files (1)                      | 57393ms
JSHint app- QUnit (1)                         | 49491ms
ES6: App Tree (1)                             | 41827ms
Run Code Online (Sandbox Code Playgroud)

相比之下,在文件修改后的grunt项目中,构建过程可以在2~3秒内完成.

我用的是Windows 7.

小智 24

你问

为什么ember-cli这么慢

它本身并非缓慢,它是Broccoli.原因包括:

  1. Broccoli在Windows下复制文件而不是符号链接.要避免这种情况,请在具有管理员权限的命令提示符下运行构建.

  2. 西兰花是磁盘密集型的.要解决这个问题,请购买SSD.

  3. 西兰花是处理器密集型的.要解决此问题,请获得更快的机器(最好是非Windows).

  4. Broccoli会创建大量临时文件tmp,这会降低性能.要解决这个问题,请tmp不时清理.

  5. 众所周知,西兰花本身就很慢.您可以在西兰花网站上找到相关问题.要解决这个问题,请等待西兰花人解决性能问题,这是他们的路线图.已经进行了大量改进,因此升级到最新版本的所有内容.

  6. 西兰花一遍又一遍地重建所有东西,包括没有改变的东西.要解决此问题,请手动调整构建过程以排除某些内容并根据需要手动执行.例如,假设您正在通过凉亭引入一个200KB的外部JS软件包,并将app.import其放入您的软件包中Brocfile.js.作为临时解决方案,并查看它是否有所作为,从Broccoli世界中删除该文件并直接加载它index.html.这同样适用于大型CSS文件.

  7. 西兰花将在默认安装中运行babel.巴别塔并不那么慢,但确实需要时间.要解决此问题,如果您不使用ES6语法,请删除babel依赖项.

  8. 您的病毒扫描程序可能正在尝试扫描Broccoli创建的数千个文件.ember-cli-windows仅针对后卫处理此问题.如果您使用的是其他防病毒软件包,要解决此问题,请将您的开发目录添加到要跳过的位置列表中.

作为参考,我有一个小型的Ember项目,我在带有SSD的快速机器上安装了Windows主机的Ubuntu Virtual Box VM,并且构建需要2-3秒.

您可能还想考虑在ember-cli列表中询问此问题.您还可以选择一个不会在不成熟且低效的构建系统中烘焙的不同框架.

  • @MohitJain嗯?问题是"为什么ember-cli"这么慢.我的答案解决了七个不同的原因,并提供了处理它们的方法.你认为什么样的答案是"答案"?无论如何,我已经编辑了我的答案. (2认同)
  • @MohitJain谢谢.我知道"你试过这个吗?"这个形式的答案.不是真正的答案.在这种情况下,我的"建议"不是"可能这是问题,我不知道,但嘿,试试这个",而是(意味着)形式的答案"做这个,因为它解决观察到的缓慢行为的已知原因". (2认同)

Ste*_*ner 5

对于 Windows 用户,需要正确启用符号链接。因为我们在 Microsoft 的朋友实际上是 ember 和 ember-cli 的活跃用户。他们提供了一个插件来做到这一点。

有关更多详细信息,请参阅:http : //ember-cli.com/user-guide/#windows。对于所有用户,请参阅:https : //github.com/ember-cli/ember-cli/blob/master/docs/perf-guide.md

[更新]

在过去的 6 个月中,几个重大的性能改进已经落地,有些改进了一两个数量级(显然这取决于某些因素......)

随着时间的推移,计划进行更多的性能改进,其中一项特别重要的改进是消除对符号链接或复制的依赖。这应该让我们的 Windows 同行(以及那些驱动器较慢的人)非常高兴。

对于目前感觉他们看到的性能低于最佳性能的任何人,让我推荐本指南:https : //github.com/ember-cli/ember-cli/blob/master/docs/perf-guide.md

最近的许多改进都是以向后兼容的方式完成的,但确实需要升级依赖项,确保升级相关的依赖项,并使用该指南来跟踪任何剩余的问题并报告它们。


Windows 子系统 Linux 现在似乎也运行良好!