如何加速Flex Builder 3编译时间?有什么建议吗?

12

我在Mac上运行Flex Builder 3,随着我的项目越来越大,编译时间变得越来越长。我正在使用一些SWC文件,并且有很多代码,但是构建不应该花费数分钟并每天崩溃吧?

14个回答

10
首先,对某些回复进行评论:
  1. 在Flex Builder中不需要显式指定-incremental,因为它默认使用增量编译。

  2. -keep-generated-actionscript会导致性能下降,因为它指示编译器在编译过程中写出为MXML组件生成的AS3代码。在编译过程中进行文件I/O意味着不必要的暂停和低CPU利用率。

  3. -optimize减慢了链接速度,因为它指示链接器生成较小的SWF。请注意,-optimize=true|false对构建SWC没有任何影响,因为SWC是库并且必须是未优化的。

  4. 我很少去弄JVM设置,因为JVM很好地知道自己的工作,并在运行时进行自我调整。大多数人通过设置各种GC调优参数使情况变得更糟。也就是说,有3个设置大多数人都理解并正确设置其用法:

-Xmx(最大堆大小)

-server或-client(HotSpot Server或Client VM)

-XX:+UseSerialGC或-XX:+UseParallelGC(或其他非串行GC)

-server在运行Flex编译器时始终比-client表现优异约30%。 -XX:+UseParallelGC打开并行垃圾收集器。适用于多核计算机和计算机仍有CPU周期的情况。

您还可以查看HellFire编译器守护程序(http://bytecode-workshop.com/)。它使用多个处理器内核同时编译多个Flex应用程序。您还可以通过套接字在第二台机器上运行编译器(假设您的第二台机器具有更快的CPU和更多内存)。

在我看来,使用比库更多的模块,并使用HFCD。

希望这可以帮助。

- Clement


1
我不理解你对于-keep-generated-actionscript的观点。你是在说缓存这些资源的I/O成本超过了每次构建时重新编译它们的成本吗?考虑到我每天要构建数十次代码,我觉得这是难以置信的。 - Tim Keating

8
不需要在命令行上使用mxmlc来添加编译器标志。在Flex导航器中右键单击您的项目,选择“属性”,然后在出现的对话框中选择“Flex编译器”。在那里,您可以添加任何额外的编译器标志。
不过,增加代码意味着增加编译时间,这是无法避免的。如果您没有进行发布构建(或者在Flex Builder中被称为其他名称),那么您的编译器设置很可能不包括optimize。更好的选择是尝试-incremental(它只重新编译已更改的部分)和-keep-generated-actionscript(它防止编译器删除从应用程序的MXML文件生成的ActionScript文件)。
我非常喜欢在Ant中使用mxmlc命令行,而不是Flex Builder。虽然我认为后者的编译速度并不慢,但在所有方面都感觉更迟缓。使用Ant还可以在构建时执行更多操作,以及条件编译(仅在源代码实际更改时才编译SWF或SWC)。查看我的博客文章获取更多信息。
您可以尝试使用Flex编译器Shell,这是另一个可以加快速度的命令行工具。基本上,它尝试在构建之间保持尽可能多的内存,因此无需等待诸如JVM启动(Flex编译器是Java应用程序)之类的事情。另一方面,这与Flex Builder所做的有些相似。

5
除了已经提到的建议之外,关闭您没有使用的任何已打开的项目。
在导航器视图中右键单击项目,然后选择“关闭不相关的项目”。
根据您打开的项目数量,这可以显著提高编译时间以及整体性能。
迈克·钱伯斯
mesh@adobe.com

2
遗憾的是,即使在我的8核Mac Pro上配备了12 GB的RAM,对于一小段代码,Flex构建也需要很长时间。我浪费了很多等待Flex构建的时间。在我的双核Xeon Linux盒子上运行mxmlc速度也不会更快。"关闭无关的项目"对我来说并不重要;我只打开了一个项目。 - Mitch Haile
1
我们有一个非常大的Flash Builder 4项目,即使在最快的机器上编译时间仍然是个问题。问题在于,即使对私有函数的内部进行最小的更改,似乎也会导致Flash Builder/Flex完全不必要地重新构建整个项目。也许他们计划在未来的版本中加入类缓存等功能! - The D Williams

4

4

我创建了一个带有工作区的RAM磁盘,这可以提高编译时间高达10%。虽然不多,但也是一些进步。


2

如果可能的话,您的计算机需要至少4G内存,并确保覆盖eclipse/flexbuilder为应用程序提供的默认内存设置。

如果您不知道如何执行此操作,可以在/Applications中找到flexbuilder应用程序,右键单击并选择“显示包内容”。然后进入contents文件夹并编辑eclipse.ini文件。编辑该文件以至少具有以下内存设置:

-vmargs -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=128m 

另外值得一提的是,进入Eclipse/FlexBuilder首选项并在Windows->Preferences->General下勾选“显示堆状态”复选框也很重要(这是在带有FB插件的eclipse中,我假设独立的FB中也会有此功能)。

这将在窗口右下角显示当前内存情况,并有一个小垃圾桶图标可以强制进行垃圾回收。

我还建议在文件更改时关闭自动构建项目(您可以使用cmd-B强制构建)。

我们的一个巨大项目有相当多的模块文件,在执行这些步骤后,FlexBuilder 3的性能表现不错。


1

我总是禁用Flex的“自动编译”。它编译太多,花费太长时间,会打断我的工作。

如果您有许多不同的项目文件,所有这些文件都需要重新编译,但您也打开了其他项目并且不想在构建时总是关闭它们,您还可以使用Eclipse Working Sets。

不幸的是,默认的Flex导航器不支持工作集。但是您可以使用“窗口/显示视图/...”打开“包资源管理器”。单击右上角的小白色向下箭头,然后选择“顶级元素:工作集”。然后,您可以添加工作集(即项目组)。每个项目都至少需要在一个工作集中(默认为“其他项目”),但可以在多个工作集中。

现在,使用“项目/构建工作集/...”,您可以指示Eclipse仅构建此工作集中的所有项目,而不是其他任何项目。如果您怀疑您的项目引用有时会出现问题,则特别有用-否则,构建“最上层”的项目应自动触发后续构建。


1
SDK 4.x.x引入了愚蠢的错误(请参见Adobe bugsystem,问题FB-27440),导致带有SVN或CVS元数据的项目编译速度比使用SDK 3.x.x慢得多。关于如何修复它,请参见这里

1

前往项目->属性->Flex应用程序。列出的所有应用程序每次都会被编译(即使您有一个默认设置)。如果您除了默认应用程序之外删除了所有内容(不用担心,它不会删除实际文件),则只会编译默认应用程序。这为我带来了显着的加速。如果更改默认应用程序,则将其添加到Flex应用程序列表中-增加编译时间。您需要维护此列表以获得最快的编译速度。


1

正如克莱门特所说,使用HellFire编译器守护程序。如果您的机器上有多个模块和更多的CPU核心,它可以并行编译它们。另一个选择是使用IntelliJ(商业版),它提供了相同的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接