2008-11-19 56 views
3

按照Adobe Flex的文檔:http://livedocs.adobe.com/flex/3/html/help.html?content=controls_15.html如何控制Flex 3的圖像控制緩存

使用圖像多次

您可以通過使用正常的圖像導入語法使用相同的圖像在應用程序中多次每一次。 Flex只加載一次圖像,然後根據需要多次引用加載的圖像。但是,在測試中,我們發現如果您在IE 9/10中請求相同的圖片(相同的網址等),將不會發布新的http請求,但通過Firefox,Safari(PC和MAC)總是發出新的請求。

我想防止每次嘗試使用它時從服務器上拉取圖像任何人都有任何想法,爲什麼這隻在IE中工作?

回答

2

在Flex應用程序中多次加載圖像然後重複使用該圖像的最佳方式是嵌入圖像並將其綁定到類表示,然後從此類引用該類。

例子:

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

HTH

1

我也有成功與加載圖像一次,然後再使用它的源屬性:

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

var myNewImage:Image = new Image(); 

myNewImage.source = myImage.source; 
0

真正的問題不在於如何緩存圖像,但爲什麼IE瀏覽器在FF,Safari,Chrome等不使用瀏覽器緩存的圖像? (IE7 btw)。

我仍然試圖想出一個合理大小的示例應用程序。我們有一個畫布,帶有mx:Image或mx:SWFloader。畫布被重新創建,但是圖像url是相同的,所以瀏覽器應該返回緩存的圖像,而不是發出另一個請求。一個非常簡單的例子就是一個mx:Image你可以在其中設置源代碼,清除源代碼並重置源代碼,這樣可以在所有瀏覽器中正確使用緩存的圖像。

+0

你也可以設置一個圖像的源代碼爲一個原始的ByteArray,我想知道這是否會完全否定,但瀏覽器想要處理圖像? – defmeta 2008-11-21 18:56:12

4

下面是答案:永遠不要認爲IE正確地做到了。所有其他瀏覽器都是正確的,IE錯了。 .swf文件通過Cache-control:private header返回。 IE不應該返回緩存的圖像。正確設置Cache-Control標頭會導致所有瀏覽器按預期運行。

-1

問題是圖像的過期時間。在應用程序服務器中配置映像到期時間的策略,並在所有瀏覽器中運行緩存。

4

一個解決辦法是通過保存原始實例的bitmapData,並用它作爲源的後續實例來用ActionScript創建自己的圖像緩存:

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