我有一个Flex应用程序here
如果你打开那个链接,你会发现下载需要很长时间(在第一个栏完成后,屏幕会暂时显示空白然后显示应用程序),即使它只是一个简单的只有一个屏幕的Flex应用程序(尽管有两种状态)。
我打开了这个应用程序,打开了 firebug ,我注意到它花了这么长时间的原因是因为浏览器正在下载 2.4 MB(!)值得的数据只是为了显示该应用程序。 实际应用.swf文件只有88 KB,但也会下载更多。
正在下载的一些额外.swf文件(非常大):
mx.swf,spark.swf,spark skins.swf,text-layout.swf等等......其中每个都 300-400 KB !
我过去在 Flex 3 中开发了一些东西,但根本不是这样。
我在这里缺少什么?
谢谢。
P.S。:我正在使用Flash Builder 4.5 for PHP。
答案 0 :(得分:6)
你是对的,它似乎需要很长时间才能加载。如果没有正式的代码审查,我不确定为什么。
我没有明确的答案。但是,这里有几点需要注意:
1)在每个SDK版本中,Adobe都将Flex Framework分成多个版本;更多封装的SWF文件。实际的Flex Framework文件可以作为SWZ文件分发。这些是可以跨多个域缓存的Adobe编译库。理论上,每次加载应用程序时都不必下载这些文件;导致更小的文件大小。我相信你必须将框架设置为加载为RSL才能从中受益。 Flash Builder项目属性中应该有此设置。
2)好像你上传了bin-debug文件夹。在投入生产之前,请务必导出发布版本。这将导致您分发一个小的SWF文件,这可能会有所帮助。
3)我希望Flex Compiler优化生成的SWF,以便不包含它不需要的类。我不确定这与为您的应用下载的额外SWF有何关系。您使用的是任何MX组件吗?您使用的是使用文本布局框架的任何组件吗? (一些Flex文本控件在引擎盖下使用它)。如果不;理想情况下,如果您不使用这些文件,则不会下载这些额外文件(mx.swf和text-layout.swf)。因此,您可以通过使用等效代码来查看代码并对其进行优化。
4)您的应用在启动时做了什么?你确定这里的问题是所有这些文件都被加载了吗?或者代码中是否存在阻止快速设置应用程序的内容?
答案 1 :(得分:3)
您列出的其他SWF包含应用程序所必需的库。它们被称为运行时共享库(RSL)(请参阅link for details)。
RSL的好处是它们可以通过浏览器和Flash Player缓存,因此2.4 Mb是第一次加载的大小。更重要的是,RSL的特殊形式(称为SWZ)是签名库,可以由Flash Player直接在所有Flash应用程序中缓存。要优化您的RSL,请参阅the following link。
另一种方法是通过Flash Builder中的“项目设置”在应用程序中包含必需的类。整个大小将更少,它将是单个SWF,但它将在您编译和部署新应用程序版本时一直加载。