Как управлять кэшированием контроля изображений Flex 3 - PullRequest
3 голосов
/ 19 ноября 2008

Согласно документам Adobe Flex: http://livedocs.adobe.com/flex/3/html/help.html?content=controls_15.html

Использование изображения несколько раз

Вы можете использовать одно и то же изображение несколько раз в своем приложении, используя каждый раз обычный синтаксис импорта изображений. Flex загружает изображение только один раз, а затем ссылается на загруженное изображение столько раз, сколько необходимо.

Однако в ходе тестирования мы обнаружили, что если вы запрашиваете одно и то же изображение (тот же URL-адрес и т. Д.) В IE flash 9/10, новый запрос http не будет выдан, но с Firefox, Safari (ПК и MAC) a новый запрос всегда выдается.

Я хочу запретить извлечение изображения с сервера каждый раз, когда я пытаюсь его использовать, у кого-нибудь есть идеи, почему это работает только в IE?

Ответы [ 6 ]

4 голосов
/ 14 июля 2009

Одним из обходных путей является создание собственного кэша изображений с помощью 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);
}

Я создал полностью работающий пример и разместил источник здесь .

4 голосов
/ 24 ноября 2008

Вот ответ: НИКОГДА не думайте, что IE делает это правильно. IE был не прав, все остальные браузеры были верны. Файлы .swf возвращались с Cache-control: private header. IE не должен был возвращать кэшированное изображение. Правильная установка заголовка Cache-Control привела к тому, что все браузеры работают должным образом.

2 голосов
/ 19 ноября 2008

Лучший способ загрузить изображение один раз и затем многократно использовать его в приложении Flex - это встроить изображение и связать его с представлением класса, а затем просто ссылаться на этот класс.

Пример:

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

НТН

1 голос
/ 20 ноября 2008

Я также успешно загрузил изображение, а затем повторно использовал его исходное свойство:

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

var myNewImage:Image = new Image();

myNewImage.source = myImage.source;
0 голосов
/ 06 июля 2009

Проблема заключается в истечении срока действия ваших изображений. Настройте на сервере приложений политику истечения срока действия изображений, и кэш работает нормально во всех браузерах.

0 голосов
/ 20 ноября 2008

Реальный вопрос не в том, как кэшировать изображение, а в том, почему IE использует кэшированное изображение в браузере, а FF, Safari, Chrome и т. Д. Нет? (IE7, кстати).

Я все еще пытаюсь найти пример приложения разумного размера. У нас есть холст с mx: Image или mx: SWFloader. Холст воссоздается, однако URL-адрес изображения идентичен, поэтому браузер должен возвращать кэшированное изображение и не выдавать другой запрос на него. Очень простой пример просто mx: Image, где вы устанавливаете источник, очищаете источник и сбрасываете источник, правильно использует кэшированное изображение во всех браузерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...