我在Mac上运行Flex Builder 3,随着项目的增长 - 编译时间越来越长。我正在使用一些SWC并且有相当数量的代码,但它应该不需要花费几分钟来构建并且每天都会崩溃吗?
答案 0 :(得分:10)
首先,评论一些回应:
无需在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服务器或客户端VM)
-XX:+ UseSerialGC或-XX:+ UseParallelGC(或其他非串行GC)
运行Flex编译器时,-server始终优于-client约30%。 -XX:+ UseParallelGC打开并行垃圾收集器。是多核计算机的理想选择,当计算机仍有CPU周期备用时。
您可能还想查看HellFire编译器守护程序(http://bytecode-workshop.com/)。它使用多个处理器内核同时编译多个Flex应用程序。您还可以通过套接字在第二台机器上运行编译器(假设您的第二台机器具有更快的CPU和更多的内存)。
在我看来,使用比库更多的模块并使用HFCD。
希望这有帮助。
-Clement
答案 1 :(得分:8)
为了能够添加编译器标志,不需要在命令行上使用mxmlc
。在Flex Navigator中右键单击您的项目,在出现的对话框中选择Properties,然后选择Flex Compiler。你可以添加任何额外的编译器标志。
不确定是否有很多工作要做,更多的代码意味着更多的编译时间,这就是它的方式。如果您没有进行发布构建(或者在Flex Builder中调用它),则编译器设置不太可能包含optimize
。更好的选择是-incremental
(仅重新编译已更改的部分)和-keep-generated-actionscript
(这会阻止编译器删除它从应用程序的MXML文件生成的ActionScript文件)。
与Flex Builder相比,我非常喜欢在命令行上使用mxmlc
(通过Ant)。虽然我不认为后者编程速度较慢,但在各方面都感觉更加迟钝。使用Ant还可以在构建和条件编译时完成编译(如果源代码实际已更改,则只编译SWF或SWC)。有关详细信息,请查看a blog post of mine。
你可以尝试的是Flex Compiler Shell,这是另一个可以加快速度的命令行工具。基本上它试图在构建之间尽可能地保留在内存中,因此不需要等待JVM启动之类的事情(Flex编译器是Java应用程序)。另一方面,这就是Flex Builder所做的一切。
答案 2 :(得分:5)
除了已经提到的建议之外,请关闭您尚未使用的所有项目。
在导航器视图中单击项目并选择“关闭不相关的项目”。
根据您打开的项目数量,这可以显着改善编译时间以及所有性能。
迈克室mesh@adobe.com
答案 3 :(得分:4)
编译时间慢是因为拥有大量嵌入资源([Embed]或@Embed)。
本文的选项2可能会对您有所帮助:[http://www.rogue-development.com/blog2/2007/11/slow-flex-builder-compile-and-refresh-solution-modules/]
答案 4 :(得分:4)
我使用工作区创建了RAM磁盘,它可以提供高达10%的更好的编译时间。不多,但有些东西。
答案 5 :(得分:2)
如果可能,您希望计算机上至少有4场演出,并确保覆盖eclipse / flexbuilder为应用程序提供的默认内存设置。
如果您不确定如何执行此操作,可以在/ Applications中找到flexbuilder应用程序,右键单击并选择“显示包内容”。然后进入内容文件并编辑eclipse.ini文件。编辑该文件的内存设置至少为:
-vmargs -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=128m
同样值得进入eclipse / flexbuilder首选项并检查Windows下的“显示堆状态”框 - > Preferences-> General(这是在使用FB插件的eclipse中,我假设它也是那里有独立的FB)。
这显示了窗口右下方的当前内存,并且有一个垃圾桶图标,因此您可以强制进行垃圾回收。
我还建议在文件更改时关闭项目的自动构建(可以使用cmd-B强制构建)。
我们有一个包含相当多模块文件的庞大项目,FlexBuilder 3中的性能与这些步骤相当不错。
答案 6 :(得分:1)
转到项目 - >属性 - > Flex应用程序。列出的所有应用程序每次都会编译(即使您有默认设置)。如果删除除默认值之外的所有内容(不用担心,它不会删除实际文件),它只会编译默认应用程序。这导致了我的显着加速。如果您更改默认应用程序,它会将其添加到Flex应用程序列表 - 添加到您的编译时间。您需要维护此列表以获得最快的编译。
答案 7 :(得分:1)
我总是禁用Flex的“自动编译”。它汇编太多,耗时太长,因此打断了我的工作。
如果您有许多不同的项目文件,并且所有这些项目都需要重新编译,但是您还打开了其他项目并且不想关闭它们,那么您也可以使用Eclipse工作集。
不幸的是,默认的Flex Navigator不支持工作集。但您可以使用 Window / Show View / ... 打开 Package Explorer 。单击小白色向下箭头到顶部,然后选择顶级元素:工作集。然后,您可以添加工作集(也称为项目组)。每个项目至少需要有一个工作集(默认为“其他项目”),但可以有几个。
现在使用项目/构建工作集/ ... ,您可以指示Eclipse构建此工作集中的所有项目,但不能构建其他任何项目。如果您怀疑项目引用有时会被破坏,这将非常有用 - 否则构建“最顶层”项目应该会自动触发后续构建。
答案 8 :(得分:1)
正如Clement所说,使用HellFire编译器守护进程。如果您的计算机上有多个模块和更多CPU核心,它可以并行编译它们。另一个选择是使用提供相同功能的IntelliJ(商业版)。
答案 9 :(得分:1)
SDK 4.x.x引入了愚蠢的bug(参见Adobe bugsystem,问题FB-27440),这导致使用SVN或CVS元数据编译的项目比使用SDK 3.x.x慢得多。有关如何修复,请参阅here。
答案 10 :(得分:0)
您可能想要浏览Flex SDK中的命令行编译器mxmlc
。我记得,Flex Builder 3似乎隐藏了所有编译器的细节,但也许你可以附加的参数可以帮助你加速编译。
例如,您可能想要设置optimize=false
,这将跳过优化字节码的步骤(可能减少编译时间)?这当然是以实际应用程序的性能和文件大小为代价的。
有关mxmlc
的更多文档,请访问:http://livedocs.adobe.com/flex/3/html/compilers_13.html。
答案 11 :(得分:0)
我不使用Flex Builder,但是我每天都使用Flex SDK编译器,在找到Flex Compiler SHell之前,我浪费了大量时间等待MXMLC编译器完成其工作:
http://blog.zarate.tv/2008/12/07/theres-something-called-flex-compiler-shell/
虽然理论上Flex Builder已经使用了这种优化,但值得检查。
答案 12 :(得分:0)
您可以使用工作集编译一组属于您正在更改的应用程序而不是整个项目的组件
<强> http://livedocs.adobe.com/flex/3/html/help.html?content=build_6.html 强>
答案 13 :(得分:-1)
通常第一次构建时间最长,之后很快就会很快。这是使用Vista x64 w / core 2 duo。
否则,我几乎可以肯定英特尔酷睿i7至尊版965 3.2GHz升级处理器可以加快你的Flex建设速度...... :) :) :)