![]() |
загрузка нескольких файлов в процентах
Увидел у 'зеленых носков' их загрузчик и меня заинтересовало следующее : каким образом они определяют в процентах статус загрузки сразу нескольких файлов?
Получается что они получают полную информацию о количестве байт всех файлов еще до того, как они будут загружены. Каким образом они это могли бы реализовать? |
Получают от сервера размеры файлов?
|
Все довольно просто. Смотри :
1. Узнаем сколько картинок = столько лоадеров. Макс собирает все лоадеры в кучу. Далее есть некая переменная 100 / лоадеры . И так допустим у нас 5 лоадеров - 100 / 5 = 20 . Тоесть каждый лоадер работает в режиме 20% об общего прогресса 2. Овералл = (curloader.bytesLoaded / curloader.bytesTotal)*loaderCounts * 20 ( что то типа того, тока с форумулой помоему напутадл )) |
Маловероятно. Это обычная as3 библиотека.
Интересно можно ли узнавать количество байт подобным образом. Код AS3:
|
Конечно нельзя )) Поток открывается на событии open далее начинается прогресс - где идет получение.
Можно конечно запустить все лоадеры по прогрессу и как только прогресс отработал сразу закрыть поток, но успехов кроме как жуткие задержки перед началом общей загрузки это особых не принесет |
Цитата:
В принципе можно делить оверол на общее кол-во загрузок и по загрузке каждого конкретного ресурса прибавлять некий процент - долю, но это не совсем точные данные в случае когда мы будем грузить два ресурса один большой другой маленький, визуально будет казаться что 50 процентов загрузилось быстро, а остальные 50 подвисли. Хотелось бы получить точный оверол, выраженный в количестве байт и по событию Event.Progress отнимать bitesLoaded конкретной загрузки, тем самым, обеспечив гибкую и плавную визуализацию процесса загрузки. |
Может я что-то не понял. Проблему тоже видимо не так понял.
Есть 3 загрузчика, которые одновременно загружают файлы: Код AS3:
Код AS3:
|
так то да, но врядли носки используют кучу лоадеров вместо одного :)
|
Cheburashka, проблема в том, что пока Loader не начал что-то грузить (не получил первый ответ от сервера), то contentLoaderInfo.bytesTotal у него 0. Например, если вдруг браузер может качать только в один поток, т.е. по очереди эти три лоадера будут грузить, то проценты у тебя три раза добегут до 100)
|
Не надо грузить параллельно.
У пользователей с плохим коннектом будут проблемы. Я лично поступаю очень просто. Допустим, надо загрузить 5 библиотечных файлов от 400 до 800 кб каждый. Ставим их в очередь и последовательно грузим. При этом всю линейку прогресс-бара делим на количество загружаемых файлов, а внутри каждой сублинейки показываем прогресс загрузки соответствующего файла. Работает очень симпатично. |
Мне кажется зная количество загружаемых файлов не сложно будит построить такую загрузку.
создав общую переменную и к ней прибавлять то что показывает e.bytesLoaded / на количество загружаемых объектов, ну и естественно показывать то что хранится в общей переменной. Так не проще? Код AS3:
|
e.bytesTotal и e.bytesLoaded - это вроде внутри одного процесса загрузки (одного лоадера)
|
Ну, если внимательно посмотреть то я использую рекурсивный метод. Т.е. там где стоит "//..." подразумевается часть кода которая и добавляет/удаляет лиснеры и т.п., асам процесс идёт по очерёдно, друг за другом. Если не понятно объяснил не поленюсь накидать полный пример.
|
не проверил на практике толька что писал , но теоритически предпологается что будет работать
Код AS3:
|
Опять же вы привязываетесь к лоадерам. Еще раз говорю, что количество лоадеров и количество загрузок не одно и тоже - загрузок может быть 10, 20, 30 а лоадеров может быть 1, 2, 5 в зависимости от алгоритмов менеджера загрузок. Собственно я и так понимаю, что уперся в невозможность самого actionscript работать с непосредственно файлами. В случае, когда у нас есть сервер и серверный программист наверное будет правильнее получить оверал от сервера, в ином случае придется делать заглушки. Интересно можно ли с помощью HAXE как то обойти ограничения связанные с файловой системой и непосредственно узнать их размер перед загрузкой?
|
Как Вы себе это представляете? Может быть Вас это удивит, но HTTP-сервер в любом случае возвращает размер файла (заголовок Content-Length), однако происходит это после открытия соединения (как иначе можно получить размер файла, не спросив об этом сервер?). Файловая система тут вообще не при делах, равно как и HAXE
|
Хорошо, ну а если флеш лежит в том же месте, что и контент. И для оценки размера файлов я не задействую
htttp запрос, есть ли возможность работать с файлами исключительно в той же директории что и флеш? |
Ну, если говорить об AIR - то да, есть свойство size у файлов.
|
Vishapakahr очень громоздка.
Вот проверенный вариант которым пользуюсь постоянно. Код AS3:
А если у кого и показан весь процесс, то это только если в xml - ке к пути каждой картинке добавлен её вес, после чего это дело суммируется и вычитается в процессе. |
function in function .... ужасть
|
Цитата:
|
мук так делает? не знал не знал...
|
| Часовой пояс GMT +4, время: 06:34. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.