我在Mac上运行Flex Builder 3,随着我的项目越来越大,编译时间变得越来越长。我正在使用一些SWC文件,并且有很多代码,但是构建不应该花费数分钟并每天崩溃吧?
我在Mac上运行Flex Builder 3,随着我的项目越来越大,编译时间变得越来越长。我正在使用一些SWC文件,并且有很多代码,但是构建不应该花费数分钟并每天崩溃吧?
在Flex Builder中不需要显式指定-incremental,因为它默认使用增量编译。
-keep-generated-actionscript会导致性能下降,因为它指示编译器在编译过程中写出为MXML组件生成的AS3代码。在编译过程中进行文件I/O意味着不必要的暂停和低CPU利用率。
-optimize减慢了链接速度,因为它指示链接器生成较小的SWF。请注意,-optimize=true|false对构建SWC没有任何影响,因为SWC是库并且必须是未优化的。
我很少去弄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
mxmlc
来添加编译器标志。在Flex导航器中右键单击您的项目,选择“属性”,然后在出现的对话框中选择“Flex编译器”。在那里,您可以添加任何额外的编译器标志。optimize
。更好的选择是尝试-incremental
(它只重新编译已更改的部分)和-keep-generated-actionscript
(它防止编译器删除从应用程序的MXML文件生成的ActionScript文件)。mxmlc
命令行,而不是Flex Builder。虽然我认为后者的编译速度并不慢,但在所有方面都感觉更迟缓。使用Ant还可以在构建时执行更多操作,以及条件编译(仅在源代码实际更改时才编译SWF或SWC)。查看我的博客文章获取更多信息。编译时间缓慢通常由于具有大量嵌入资源([Embed]或@Embed)。
本文的第二个选项可能会对您有所帮助:[http://www.rogue-development.com/blog2/2007/11/slow-flex-builder-compile-and-refresh-solution-modules/]]
我创建了一个带有工作区的RAM磁盘,这可以提高编译时间高达10%。虽然不多,但也是一些进步。
如果可能的话,您的计算机需要至少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的性能表现不错。
我总是禁用Flex的“自动编译”。它编译太多,花费太长时间,会打断我的工作。
如果您有许多不同的项目文件,所有这些文件都需要重新编译,但您也打开了其他项目并且不想在构建时总是关闭它们,您还可以使用Eclipse Working Sets。
不幸的是,默认的Flex导航器不支持工作集。但是您可以使用“窗口/显示视图/...”打开“包资源管理器”。单击右上角的小白色向下箭头,然后选择“顶级元素:工作集”。然后,您可以添加工作集(即项目组)。每个项目都至少需要在一个工作集中(默认为“其他项目”),但可以在多个工作集中。
现在,使用“项目/构建工作集/...”,您可以指示Eclipse仅构建此工作集中的所有项目,而不是其他任何项目。如果您怀疑您的项目引用有时会出现问题,则特别有用-否则,构建“最上层”的项目应自动触发后续构建。
前往项目->属性->Flex应用程序。列出的所有应用程序每次都会被编译(即使您有一个默认设置)。如果您除了默认应用程序之外删除了所有内容(不用担心,它不会删除实际文件),则只会编译默认应用程序。这为我带来了显着的加速。如果更改默认应用程序,则将其添加到Flex应用程序列表中-增加编译时间。您需要维护此列表以获得最快的编译速度。
正如克莱门特所说,使用HellFire编译器守护程序。如果您的机器上有多个模块和更多的CPU核心,它可以并行编译它们。另一个选择是使用IntelliJ(商业版),它提供了相同的功能。