簡體   English   中英

如何控制Flex 3圖像控件緩存

[英]How to Control Flex 3 Image Control Caching

根據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),新的請求是總是發行。

我想防止每次我嘗試使用它時從服務器中提取圖像任何人都知道為什么這只在IE中工作?

一種解決方法是使用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);
}

我創建了一個功能齊全的示例並在此處發布了源代碼。

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

一次加載圖像然后在flex應用程序中多次重用該圖像的最佳方法是嵌入圖像並將其綁定到類表示,然后從那時起引用該類。

例:

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

HTH

我也成功加載了Image然后重用它的source屬性:

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

var myNewImage:Image = new Image();

myNewImage.source = myImage.source;

真正的問題不是如何緩存圖像,但為什么IE在FF,Safari,Chrome等不使用瀏覽器緩存圖像? (IE7順便說一句)。

我仍然想要一個合理大小的示例應用程序。 我們有一個畫布,帶有mx:Image或mx:SWFloader。 畫布被重新創建,但是圖像URL是相同的,因此瀏覽器應返回緩存的圖像,而不是發出另一個請求。 一個非常簡單的mx示例:您設置源,清除源並重置源的圖像確實在所有瀏覽器中使用緩存的圖像。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM