Flex减肥方案
???? ?现有网络环境还不太适合访问大数据量的网络页面,特别是越来越注重用户体验的今天。如果一个页面加载好好几秒,势必会使用户有关掉页面的冲动,更别说会去体验你所谓的“超酷应用”。所以对于RIA开发者,如何减小最终生成的文档类swf大小就成为十分重要的优化环节了。本文在深入研究Flex开发特性的基础上,总结了有效减小swf大小的通用手法,希望对大家有借鉴作用。
?
1.尽量减少容器之间的深层次嵌套,嵌套太多的容器如VBox和Canvas后不仅生成很多冗余代码,也会使得你的程序运行相当缓慢;
2.尽量不要使用embed嵌入资源,特别是嵌入字体。一般字体都很大,当你嵌入某种中文字体后会发现swf轻而易举就超过了1M;
3.把一个大的Flex程序分成各个不同的功能部件, 每个Module单独编译成一个SWF ,需要的时候,再动态 的加载调用.减小主程序的体积.
4.使用RSL(Runtime Shared Library)
5.使用release版本发布
?
下面重点介绍RSL和Module两种方式具体使用。
RSL是运行时共享库。RSL分认证的RSL和非认证的RSL,听说在这里采用的认证的RSL, 经过认证的RSL可以使用Flash Player Cache机制,从而达到更快的启动效率。对于Flex开发来说,Flex组件框架就是属于认证的RSL.不用Framework RSL, 你的程序就是这样的:你自己的自定义类代码 + 你必须使用的Flex自带类 (framework)。如果使用了Framework RSL你的程序就只包含你自己写的类代码而已, 体积就很小了,framework会变成另一个文件, 动态加载到你的程序里。当一个用户加载了任何一个使用此版本RSL的应用程序后,此版本RSL会被其缓存在flash player的cache中,并且这个cache不随着浏览器缓存清空而清空,以后如果此用户再次加载使用此版本RSL的程序的时候便不再需要加载此RSL,加载速度将大大提高。RSL不光能针对Framework来做。你自己写的lib库都可以。此外有些组件比如Chart不在Framework.swc里,而是在datavisualization.swc内,图表用得多的话记得把这个也做到RSL里去。
分离RSL的步骤:
1.在项目文件夹中点右建,选择"properties"-"Flex Build Path"-"Library Path"
2.该选项卡上我们看到"FrameWork linkage",默认是选中"Merged into cdoe"
3.点开下拉,选择"runtime shared library(RSL)",按"OK“即可
这样我们的项目就已经使用RSL把框架文件分离出来了。?
注意:需要把framework_3.4.0.9271.swf和framework_3.4.0.9271.swz两个文件跟项目swf放在一目录下传到服务器上
?
使用Module的方式也比较简单,可以从文档类application里面提取出功能模块,对这些模块分别建立一个Module文件,然后编译后每个模块都会生成单独的一个swf,有些和jsp的include类似。Module最好和RSL配套使用。这并不能减少体积,但能减少用户等待载入的时间。
?