在浏览器中手动缓存SWF / SWC - 模仿Adobe签名的SWZ?

时间:2009-11-14 22:49:17

标签: javascript flex browser-cache framework-caching

我想利用Adobe的运行时共享库​​系统来实现swc,但我不确定它是如何工作的,就像它背后的编程一样。我知道它允许你在运行时加载SWC,但它是如何做到的?

我在问,因为我想尝试模仿像用于将Flex框架缓存到Flash Player中的签名RSL“swz”系统,所以如果您曾访问过下载Flex框架的网站Flash网站,然后下一次,永远,你不必再下载它。

我无法做到这一点,因为我正在使用我自己版本的Sandbox中的Flex SDK,而且我喜欢其他5个我正在使用的swc(Mate,RestfulX等)。我希望能够永久地缓存这些东西,只有在它们发生变化时才重新下载它们。

除了Adobe RSL docs之外,我该怎么做,或者我应该阅读什么?我可以使用javascript或ruby来执行此操作吗?

2 个答案:

答案 0 :(得分:1)

SWC仅由Flex编译器使用。它实际上只是一个ZIP文件,其中包含一个SWF文件,其中包含库中已编译的类以及SWF文件中的XML描述符文件。因此,SWC文件不能直接用作RSL,因为RSL只是在Flex应用程序启动之前加载的SWF文件。

Flex预加载器将加载编译Flex应用程序时引用的任何RSL。在某些情况下,这些RSL将由浏览器缓存,因为它们只是SWF。大多数浏览器不会缓存通过https加载的SWF。

Flash Player有一个特殊的SWF缓存,它不是特定于URL的(如浏览器缓存)。为了将内容放入缓存中,必须由Adobe签名。今天,唯一签署的SWF是Flex框架和数据可视化RSL。出于隐私原因,Adobe不会预见到更改此政策(如果您想了解原因,请研究缓存嗅探)。

您可以轻松创建可由浏览器缓存的自己的RSL。您可以在Flex Builder中通过将库指定为RSL或直接使用编译器来执行此操作。您可以使用compc创建SWC,然后从SWC中提取SWF文件以用作RSL。但要小心,因为许多SWC不幸地在SWC中包含它们的依赖(通常是Flex框架)。因此,在将SWF用作RSL之前,可能必须对SWC进行一些优化。 Flex SDK中还有一个优化工具,可用于自动执行此过程。

答案 1 :(得分:0)

可悲的答案是,这是不可能的。 SWZ文件仅供adobe用于其Flex框架。但是,如果您将swc链接为RLS,则可能会出现浏览器自身的缓存机制等问题。