我想利用SWC的Adobe Runtime Shared Library系统,但是我不确定它的实际工作方式(如其背后的程序)。我了解它允许您在运行时加载SWC,但是它是如何做到的?
我要问是因为我想尝试模仿Adobe用于将Flex Framework缓存到Flash Player中的Signed RSL“ swz”系统之类的东西,因此,如果您访问的网站下载了一些Flash网站的Flex框架,然后,下次,甚至永远,您不必再次下载它。
我无法执行此操作,因为我正在使用自己的沙盒版Flex SDK,而且我正在使用其他5个swc(Mate,RestfulX等)。我希望能够永久地缓存这些内容,并且只有它们更改时才重新下载它们。
除了Adobe RSL docs之类的东西,我该怎么做,或者应该读什么?我可以使用javascript或ruby做到这一点吗?
最佳答案
SWC仅由Flex编译器使用。它实际上只是一个ZIP文件,其中包含一个SWF文件,该文件在库中具有已编译的类,而XML描述符文件包含该SWF文件中的内容。因此,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中还有一个优化器工具,可用于自动执行此过程。