如何控制Flex 3图像控件缓存

时间:2008-11-19 19:29:07

标签: flex image

根据adobe flex docs:http://livedocs.adobe.com/flex/3/html/help.html?content=controls_15.html

多次使用图像

每次使用普通图像导入语法,您可以在应用程序中多次使用同一图像。 Flex仅加载图像一次,然后根据需要多次引用加载的图像。

然而,在测试中我们发现,如果你在IE闪存9/10中请求相同的图像(相同的网址等),将不会发出新的http请求,但是使用Firefox,Safari(PC和MAC)a总是发出新请求。

我希望每当我尝试使用它时都阻止图像从服务器中拉出来,任何人都知道为什么这只能在IE中工作?

6 个答案:

答案 0 :(得分:4)

以下是答案:从不认为IE正确地做到了。 IE错误所有其他浏览器都是正确的。使用Cache-control:private头返回.swf文件。 IE不应该返回缓存的图像。正确设置Cache-Control标头会导致所有浏览器按预期运行。

答案 1 :(得分:4)

一种解决方法是使用ActionScript创建自己的图像缓存,方法是保存原始实例的BitMapData并将其用作后续实例的源:

private var image1:Image = new Image();    
private var image2:Image = new Image();                 

private function init() : void
{
    image1.addEventListener(Event.COMPLETE, onComplete);
    image1.source = "icon.png";
    addChild(image1);   
}


private function onComplete(event:Event) : void
{   
    var image:Image = event.target as Image;                
    var bitmapData:BitmapData = new BitmapData(image.content.width,
                                               image.content.height, true);    
    bitmapData.draw(image.content);         
    image2.source = new Bitmap(bitmapData);
    addChild(image2);
}

我创建了一个功能齐全的示例并发布了源here

答案 2 :(得分:2)

一次加载图像然后在flex应用程序中多次重用该图像的最佳方法是嵌入图像并将其绑定到类表示,然后从那时起引用该类。

示例:

[Embed(source="myImage.jpg")]
[Bindable]
public var myImageClass:Class;

HTH

答案 3 :(得分:1)

我已经成功加载了Image,然后重用了它的source属性:

<mx:Image id="myImage" source='blah.png'/>

var myNewImage:Image = new Image();

myNewImage.source = myImage.source;

答案 4 :(得分:0)

真正的问题不是如何缓存图像,但为什么IE在FF,Safari,Chrome等不使用浏览器缓存图像? (IE7顺便说一句)。

我仍在努力想出一个合理大小的示例应用。我们有一个画布,带有mx:Image或mx:SWFloader。画布被重新创建,但是图像URL是相同的,因此浏览器应返回缓存的图像,而不是发出另一个请求。一个非常简单的mx示例:您设置源,清除源并重置源的图像确实在所有浏览器中使用缓存的图像。

答案 5 :(得分:-1)

问题是图像的到期时间。在应用程序服务器中配置映像到期时间策略,缓存在所有浏览器中运行正常。