September 4, 2007

详解Flash Player Cache——仔细说说FP U3B3【2】

ActionScript3天地会公测中...

接上一篇:仔细说说Flash Player Update 3 Beta 3(含截图和下载)【1】
Flash Player Cache的概念不是flash player 9 update 3 beta 3才提出的,事实上在两三个月前就有过这方面的讨论了。这次Update 3将它和MovieStar一同宣传,可见它的重要性也不会低于MovieStar的冲击力。

如果说MovieStar是FlashPlayer在媒体播放方面的一个重大突破,那么Flash Player Cache可以算是Flex 应用程序部署的重大突破。

有什么好处?最直接的好处是Flash Player Cache将极大的减小Flex SWF的体积!

想一想,现在编译一个Flex应用程序,至少也要100多kb。如果在应用程序中使用了大部分或全套Flex组件,SWF文件将超过500k大关。

我们每天可能要浏览数个Flex网站,每看一个Flex 程序,都要隐性的重复下载SWF所包含的Flex框架和组件。不仅浪费我们下载的时间和带宽,一次次重复初始化这些东西也让人有些不爽。
现在好了,Flash Player Cache功能会自动将这些框架和组件缓存起来,一旦客户访问我们的Flex程序(要经过一些设置),Flash Player Cache功能会自动查看本机Flash Player有没有缓存Flex程序中要求的框架和组件,如果缓存了,直接拿来使用。

注意,不仅不需要下载,连初始化的时间也省了!效率极大提高!
一个原本120多Kb的Hello world Flex程序会瘦身到53kb!一个使用全部框架和组件的程序甚至会减少500kb大小!不仅减去多余的体重,也免掉了重复初始化的时间,没有毒副作用,不呕吐,不拉肚。还犹豫什么,赶快拿起xx订购吧!——flash减肥必备!

原理是什么?RSL认证机制和跨域缓存。RSL,就是runtime-shared-libraries,运行时共享库。这个大家不陌生,AS2时也有类似概念。就是把共用的脚本和资源,放在一个swf文件中,供多个SWF程序使用。
其实Flash Player Cache核心思想就是这个。所不同的是,有认证RSL和非认证RSL之分。只有Adobe认可的RSL才会被Flash Player Cache所共享,包括Flex框架,组件以及一些工具类,也不排除未来包括其他框架。我们自己的RSL是不能被Flash Player Cache所缓存的,只能存在浏览器的缓存中。

如何识别认证RSL和非认证RSL呢?如何识别不同版本的Flex框架呢?这些其实都是靠认证机制完成的。每个认证的RSL都有独一无二的加密哈希表示自己,根据这个就可以判断是否是同一版本Flex框架和组件,或者是否是官方认证过得RSL。这样,也就避免了潜在的篡改代码可能性。

跨域共享是什么?缓存的认证RSL是共享的,是跨域的(cross-domain的),任何网站的认证RSL都可以共用。
如果本机没有缓存Flex组件,Flash Player Cache不仅仅是访问目标SWF所在的网站来下载Flex框架和组件,而是根据目标SWF提供的加密哈希(SHA256 hash)到所有已下载的网站中去查找。
意思是,如果用户第一次访问kingda.org的一个flex swf,发现需要flex 3 moxie的框架和组件;那么它会根据加密哈希查看本机,发现访问www.adobe.com时已经缓存了一个同样框架和组件,那么就会直接使用这个。

最后一个问题,如何使用Flash Player Cache功能呢?直接编译mxml当然是不行的,要通过一些设置,告诉Flex,这是一个将认证RSL分离出来的swf文件才行。

以Flex 3 SDK编译器编译example.mxml为例,很简单,如下:


mxmlc example.xmml
-runtime-shared-library-path=(Flex SDK 路径)\frameworks\libs\framework.swc,framework_3.0.165352.swf

其中3.0.165352是Flex 3 beta1 moxie组件框架版本号。注意,这功能最低要Flash Player 9.0.60以上才支持。
如果是Flex 3用户,做法如下,在Build path中,选中library path,将下拉框中Default link type改成RSL。选中Flex moxie M2(往往是第一个),点击左边三角,展开。选中framework.swf,展开。选中RSL URL(n/a),点击右边的Edit,勾选Use default link type, 点击Digest,在选择Add..,然后会弹出下面的对话框。

选择确定即可。然后编译,就会发现你的swf立刻瘦身了。
要想精益求精,还可以对分离出的RSL再进行瘦身,将其中的调试信息和元数据去掉后,RSL本身还会减少50%左右。优化方法下次再说,打字多了,累了,睡觉了。

广告:哈哈,现在刚好是阿里妈妈推广期哦,你是站长吗?推荐注册阿里妈妈赚广告费

TrackBack

TrackBack URL for this entry:
http://www.kingda.org/mt/mt-tb.cgi/202

Comments (6)

烟灭之后:

学习!

这样不错,Flex组件还有以前Flash带的组件的一个很大的问题就是,自己其实用到的很小的以部分功能,但是却要拖着一个大大的壳子,有时候感觉用起来很不划算,最终还是自己谢谢组件小点,现在可以缓存了,确实可以很大程度上提高加载时间

N神:

瘦身以后如果缓存里没有需要的framework怎么办,到哪里下载

ps。发现拼写错误-_-!

点击左边三角,展开。选中framework.swf
应该是swc

学习学习..哈哈...

to N神:
在编译时可以加入参数指定下载的URL,可以指定多个。
编译格式:


-runtime-shared-library-path=path-element,
rsl-url,
policy-file-url,
[failover-url, policy-file-url]...

其中failover-url是后备url。可以指定不同的网站,完全跨域的。可以选择一个速度最快的具有同样framework的网站。
这个我本来准备放到下一篇文章中说。

我心忆旧:

呵呵...看到你写的真是高兴..可俺一个AS3才刚明白是什么的新手...努力想看明白...虽然没机会从事开发这一级别...但也想有机会多多了解一下有关AS3之类的...希望能在你这多学点知识...如果有空看到我了...希望在百忙中回封邮件吧..坚定一个初学者的心..呵呵

留下高见,发表评论

个人信息不会外泄,请放心填写。

姓名和Email必填。

发表评论后,请耐心等待,不要频繁刷新。提交完成后,刷新一下本页即可看到您的评论。^_^

请输入验证字符"x" :
文字广告:你是站长吗?注册阿里妈妈赚广告费

最近发表

归档

全部
Creative Commons License
此 Blog 中的日记
遵循以下授权:
Creative Commons
(创作共用) 授权
.
Google PageRank
本站被Adobe官方MXNA新闻聚合器收录
本站被蓝色理想BXNA收录