打印

[其它] 详解Flash Player Cache——仔细说说FP U3B3【-2- by黑羽】

接上一篇:
仔细说说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时已经缓存了一个同样框架和组件,那么就会直接使用这个。
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)

如何使用Flash Player Cache功能呢?

最后一个问题,如何使用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%左右。优化方法下次再说,打字多了,累了,睡觉了。
(转载请保留www.kingda.org的链接)
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)
Flash Player Cache缓存到本机的哪里?Flash Player.exe里?
好呀。支持一下

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
关于这个问题,aswing群已经讨论过。也就是之前所说的dll模式。(不存在跨域,player版本问题)
http://www.flashdll.org/
http://space.flash8.net/space/?2 ... _itemid_362803.html

[ 本帖最后由 hhmin 于 2007-9-4 13:08 编辑 ]

TOP

引用:
原帖由 hhmin 于 2007-9-4 13:05 发表
也就是之前所说的dll模式。
你可能没仔细看,呵呵。RSL的概念以前就有了,这篇小文强调的是——这次的FP U3B3增加了对认证的官方RSL进行Flash Player 缓存,但非认证的RSL还是只能靠浏览器缓存。
比如AsWing,虽然是一个优秀的架构,但由于不是官方认证的RSL,就不能使用Flash Player 缓存,只能使用浏览器缓存。
跨域的问题对于非认证的RSL,是存在的。AsWing可能和Yahoo一样都是设置了一些Cross-Domain Policy File,使得所有别的站点都可以调用。而官方认证的RSL可以读取任意站点上(只要该站点上有同版本的认证RSL),是完全跨域的,不需要这样。
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)

TOP

引用:
原帖由 amamam 于 2007-9-4 10:49 发表
Flash Player Cache缓存到本机的哪里?Flash Player.exe里?
呵呵,flashplayer.exe怎么可能挤进东西呢。Flash Player Cache缓存和浏览器缓存不同,存在于
(system driver:\Document and Settings\User\)Application Data\Adobe\Flash Player\AssetCache\下。
你看到的481ED6D6B5F62DE123C1B7E78672C67FF688FA98.sgn这种sha hash加.sgn形式的文件,就是缓存起来的官方认证RSL了。
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)

TOP

感谢答疑。

TOP

使用Flash Player Cache和RSL方式配合,将会很有效。
失去执着,将一无所有。
www.7yue.com

TOP

有时间要好好研究一下
有日子没学习了

TOP