Способы загрузки изображений в AS3 - PullRequest
1 голос
/ 31 октября 2009

Как загрузить изображения в формате as3:

  1. Загрузите их все сразу, например, вот так (псевдо-код as3):

    for each (var url:String in images){
        loader.load(url);
    }
    
  2. Или загрузить их один за другим (опять же, псевдокод):

    loader.load(images.shift())
    
    onComplete(){
        loadNext(images.shift());
    }
    

Какой способ быстрее и лучше для производительности?

Ответы [ 2 ]

3 голосов
/ 31 октября 2009

Второй способ кажется намного лучше. Если загружаются сотни изображений, то при первом подходе все запросы на изображения будут выполняться почти одновременно, что делает браузер практически непригодным для использования, а загрузка первого изображения может занимать гораздо больше времени из-за параллельных запросов (пропускная способность будет разделена) чем второй подход. Но общее время загрузки (т. Е. Количество изображений * среднее время загрузки одного изображения) в первом случае будет меньше.

Лучше всего было бы использовать гибрид этих подходов. Загружать MAX_NUMBER из в любое время, что означает запуск загрузки изображений до MAX_NUMBER операций загрузки изображений. И как только операция загрузки завершится, начните загрузку новой. Ниже приводится грубый подход. loadimages необходимо вызвать после того, как фиксированный интервал времени может составлять 100 мс. И MAX_NUMBER может быть 20 или около того.

function loadimages(){
    while(count < MAX_NUMBER) {
        loader.load(images.shift);
        count++;
    }
}
onComplete() {count--;}
onFail(){count--;}
setIntarval(loadimages, 100);

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

3 голосов
/ 31 октября 2009

На этот вопрос нет простого ответа.

Когда Flash загружает файл (в браузере), браузер управляет транзакцией http, кэшированием и т. Д., Если у вас есть только несколько изображений, и они не слишком велики, первый способ легче запрограммировать и вы можете зависеть от очереди загрузки http браузеров для управления файлами.

Если у вас есть много файлов (десятки и десятки), их ошеломление некоторым способом может быть лучше по нескольким причинам. Во-первых, создание каждого объекта довольно дорого, в случае загрузчика вы подключите к нему прослушиватели событий и, возможно, даже отобразите анимацию загрузки. Это довольно дорого и замедлит Flash, уменьшая скорость отклика вашего приложения. Во-вторых, ошеломляя их, вы получаете явный контроль над тем, что загружается, а не в зависимости от реализации http в браузерах. Например, вы можете убедиться, что элементы, к которым пользователь будет обращаться в первую очередь, будут загружены первыми.

В случае гораздо больших файлов (скажем, сотен килобайт) вы можете загружать один за другим, что приводит к тому, что полоса пропускания пользователя не истощается. Это позволяет получить некоторую форму результата быстрее, чем, возможно, ожидание четырех (обычный одновременный лимит) загрузки сотен килобайтных файлов параллельно.

Стратегия, которую вы выбираете, действительно зависит от того, что вы пытаетесь сделать, и я думаю, что в конечном итоге это слишком двусмысленно для этого форума.

Еще один момент, на который следует обратить внимание: второй метод не очень надежен в случае сбоя загрузки.

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