为什么ember-cli这么慢

时间:2015-04-18 02:40:03

标签: 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

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

我使用的是Windows 7。

3 个答案:

答案 0 :(得分: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. Broccoli将在默认安装中运行babel。巴别塔并不那么慢,但确实需要时间。要解决此问题,如果您不使用ES6语法,请删除babel依赖项。

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

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

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

答案 1 :(得分:4)

对于Windows用户,需要正确启用符号链接。因为我们在微软的朋友实际上是ember和ember-cli的活跃用户。他们提供了一个完全相同的插件。

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

[更新]

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

随着时间的推移,计划进行更多的性能改进,其中一个特别重要的是解除依赖符号链接或复制的需求。哪个应该使我们的windows对应物(以及那些驱动器较慢的对应物)非常高兴。

对于目前感觉不到最佳效果的人,我建议您使用此指南:https://github.com/ember-cli/ember-cli/blob/master/PERF_GUIDE.md

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

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

答案 2 :(得分:0)

在Windows中修复性能问题的最佳解决方案是在虚拟机中运行Ubuntu(或任何你想要的linux),并在其中运行ember,使用NFS与主机共享文件夹

我遇到了完全相同的问题,现在我得到的是亚秒级建筑时间。尝试了在这里和互联网上找到的所有解决方案,但没有运气。当我迁移到Ubuntu VM时,我获得了10倍的性能。