有过FLEX,RIA产品或项目体验的用户或开发者都通晓.FLEX那第一件华丽的外衣,在加载时总是犹抱琵琶半遮面,不仅让身为用户的他们也让作为开发者的我们都为这美中不足不禁有过埋怨,和长叹.然而,不管你是一个追求完美的开发者,还是迫于用户或客户的压力来对此寻求良好的解决方案,其实我们往往都没有得到良好的效果.个中原因,先看看我们通常的解决方案再回过头来探讨.
解决方案之一:RSL
我在网上以及论坛里遇到过很多FLEX爱好者,他们很擅长用FLEX制作极具交互性以及华丽的UI,但是在编译后却发现简单的几个control,为什么会生成几百K甚至更大的SWF文件呢?百思不得其解的他们,从百度.GOOGLE以及ADOBE官方文档及网站开始了”斩首行动”.因为FLEX开发者们这方面的抱怨不在少数,所以网上的相关文章也眼花缭乱.但他们往往都找到了很让自己信服的解决办法,那就是RSL.
什么是RSL? RSL是 Runtime Shared Library的简称 RSL = Runtime shared library 运行时共享库,光知晓其名称当然还不够,其实flex 的 framework就是 class + library (类和库)而 Framework RSL 意思是, 把Flex的类和库在程序运行时动态加载而不是封装在程序里面,如果不用 Framework RSL, 你的主程序就会使用你编写的代码里必须导入的类,这样一来, 你代码写的越多, 需要导入越多的类, 你程序体积就越大.也就是说, 不用Framework RSL, 你的程序就是这样的:你自己的自定义类代码 + 你必须使用的Flex自带类 (framework)。如果使用了Framework RSL,你的程序就只包含你自己写的类代码而已, 体积就很小了.
到这一步,大多数人就以为抓到了救命草,赶快去FLEX开发指南里找RSL相关介绍,初步偿试果然有奇效,一个原来编译后500多K的SWF文件,现在瘦成了100多K了,群里,我经常听到干完此事后那种兴奋的声音.殊不知他没有继续将RSL的了解到底.
其实framework会变成另一个文件, 动态加载到你的程序里,而这个文件体积可不小哦
下面我和大家一起来做过试验:
先不运用RSL:
我新建一个干净的工程.拖入一个Button和一个AdvancedDataGrid,后者巨占资源.编译后是494KB.
再运用RSL:
主应用程序减小到232KB,而同目录下躺着的framework文件却有526K;是大了还是小了,可想而知.
RSL分认证的RSL和非认证的RSL,听说在这里采用的认证的RSL, 经过认证的RSL可以使用Flash Player Cache机制,从而达到更快的启动效率。对于Flex开发来说,Flex组件框架就是属于认证的RSL.说到这里,大家可能被我不明不白的表达弄昏了头脑,不知道我究竟想表达对RSL的什么观点?
别急,从字面上我们再来看一看,RSL即运行时共享库,既然要共享就必须是通用的东西,既然要共享那就是要在两个或两个以上的对象之间.既然是运行时的共享,就是在运行的过程中动态达到的.太好了,结论几乎就这么出来了.
当我们的应用简单到只有几个简单的控件,或者我们用到的共享资源很少, 以及没有多个对象来达成共享时,我们到底还有没有必要来运用RSL呢?我看不见得在些能起到什么立竿见影的效果.如果哪位朋友有更深入的了解,或新的发现,可以告知小弟,不胜感激.
同样基于上面对于字面意思的推敲,当一个应用很大,甚至由几个SWF文件组成时, 如果每个swf都引用了相同的类的话,那么你编译每个swf的时候,都会把那个类重复编译进去,也是就是说,无形中对整个应用而言,就多了几份类库而增大了内容,那么此时完全满足RSL字面意思推敲的逻辑.用不用RSL,是不需要迟疑的.