Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   загрузка нескольких файлов в процентах (http://www.flasher.ru/forum/showthread.php?t=169362)

inozemcev 03.10.2011 18:09

загрузка нескольких файлов в процентах
 
Увидел у 'зеленых носков' их загрузчик и меня заинтересовало следующее : каким образом они определяют в процентах статус загрузки сразу нескольких файлов?
Получается что они получают полную информацию о количестве байт всех файлов еще до того, как они будут загружены. Каким образом они это могли бы реализовать?

Bgg 03.10.2011 18:17

Получают от сервера размеры файлов?

in4core 03.10.2011 18:29

Все довольно просто. Смотри :
1. Узнаем сколько картинок = столько лоадеров. Макс собирает все лоадеры в кучу. Далее есть некая переменная 100 / лоадеры . И так допустим у нас 5 лоадеров - 100 / 5 = 20 . Тоесть каждый лоадер работает в режиме 20% об общего прогресса
2. Овералл = (curloader.bytesLoaded / curloader.bytesTotal)*loaderCounts * 20 ( что то типа того, тока с форумулой помоему напутадл ))

inozemcev 03.10.2011 18:30

Маловероятно. Это обычная as3 библиотека.
Интересно можно ли узнавать количество байт подобным образом.
Код AS3:

var bt:int;
var loader:URLLoader = new URLLoader (new URLRequest ('someResource'));
bt += loader.bitesTotal;
loader =  new URLLoader (new URLRequest ('anotherResource'));
bt += loader.bitesTotal;

И таким образом получить общее кол во байт до загрузки файлов?

in4core 03.10.2011 18:33

Конечно нельзя )) Поток открывается на событии open далее начинается прогресс - где идет получение.
Можно конечно запустить все лоадеры по прогрессу и как только прогресс отработал сразу закрыть поток, но успехов кроме как жуткие задержки перед началом общей загрузки это особых не принесет

inozemcev 03.10.2011 18:39

Цитата:

Сообщение от in4core (Сообщение 1036404)
Все довольно просто. Смотри :
1. Узнаем сколько картинок = столько лоадеров. Макс собирает все лоадеры в кучу. Далее есть некая переменная 100 / лоадеры . И так допустим у нас 5 лоадеров - 100 / 5 = 20 . Тоесть каждый лоадер работает в режиме 20% об общего прогресса
2. Овералл = (curloader.bytesLoaded / curloader.bytesTotal)*loaderCounts * 20 ( что то типа того, тока с форумулой помоему напутадл ))

На сколько я понял количество лоадеров, не обязательно и даже скорее почти всегда не равно количеству загрузок. Конкретно в этом лоадере есть параметр maxConnections который определяет максимальное количество лоадеров для параллельной загрузки.
В принципе можно делить оверол на общее кол-во загрузок и по загрузке каждого конкретного ресурса прибавлять некий процент - долю, но это не совсем точные данные в случае когда мы будем грузить два ресурса один большой другой маленький, визуально будет казаться что 50 процентов загрузилось быстро, а остальные 50 подвисли. Хотелось бы получить точный оверол, выраженный в количестве байт и по событию Event.Progress отнимать bitesLoaded конкретной загрузки, тем самым, обеспечив гибкую и плавную визуализацию процесса загрузки.

Cheburashka 03.10.2011 20:17

Может я что-то не понял. Проблему тоже видимо не так понял.
Есть 3 загрузчика, которые одновременно загружают файлы:
Код AS3:

var arLoaders : Array = [new Loader(), new Loader(), new Loader()]; // утрирую

По энтерфрейму или таймеру опрашиваем их:
Код AS3:

var bytesLoaded : int = 0;
var bytesTotal : int = 0;
for (var i : int = 0; i < arLoaders.lenght; i++) {
    var loader : Loader = Loader(arLoaders[i]);
    bytesLoaded  += loader.contentLoaderInfo.bytesLoaded;
    bytesTotal += loader.contentLoaderInfo.bytesTotal;
}
trace(String((bytesLoaded  / bytesTotal) * 100) + "%");

Или я все-таки не так понял задачу?

in4core 03.10.2011 20:28

так то да, но врядли носки используют кучу лоадеров вместо одного :)

-De- 03.10.2011 20:30

Cheburashka, проблема в том, что пока Loader не начал что-то грузить (не получил первый ответ от сервера), то contentLoaderInfo.bytesTotal у него 0. Например, если вдруг браузер может качать только в один поток, т.е. по очереди эти три лоадера будут грузить, то проценты у тебя три раза добегут до 100)

mikhailk 03.10.2011 20:59

Не надо грузить параллельно.
У пользователей с плохим коннектом будут проблемы.

Я лично поступаю очень просто. Допустим, надо загрузить 5 библиотечных файлов от 400 до 800 кб каждый. Ставим их в очередь и последовательно грузим. При этом всю линейку прогресс-бара делим на количество загружаемых файлов, а внутри каждой сублинейки показываем прогресс загрузки соответствующего файла.

Работает очень симпатично.


Часовой пояс GMT +4, время: 06:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.