PDA

Просмотр полной версии : Одновременный вызов нескольких .loadClip()


: hr :
06.10.2006, 19:59
Друзья, прошу подсказки - разумно и корректно ли инициировать (открывать) одновременно несколько загрузок MovieCLipLoader.loadClip() или MovieClip.loadMovie, или же необходимо делать это последовательно?

Т.е., скажем, такой фрагмент как-либо негативно скажется на процессе загрузки или производительности?:
for (var i = 0; i<100; i++) {
loader.loadClip("url", this["cl_"+i]);
}


или лучше обработать последовательно:

loader.onLoadInit = function() {
nextClip++;
this.loadClip("url", _root["cl_"+nextClip]);
};

silin
06.10.2006, 20:08
по опыту: первая схема (единовременный запуск) отлично работает, о корректности не задумывался, хотя кто запрещал вызывать метод сколько надо раз?

: hr :
06.10.2006, 20:18
silin, спасибо, просто иногда вот задумываешься о корректности.. :) как оно на уровне плэйера при таком варианте происходит...?

sem1313
06.10.2006, 20:30
Про одновременность загрузок, где то упоминалось, что есть ограничение на кол-во одновременных загрузок...

: hr :
06.10.2006, 20:40
sem1313 , не могли бы вспомнить конкретнее?

vic_
06.10.2006, 21:08
а что в этом случае будет с листенерами? я вызывал всегда последовательно. Сейчас делаю галерею и возникает ситуация когда в процессе загрузки юзер может нажать на паузу и опять на плей, соответственно лоадеру дается команда грузить картинку в тот же клип. Может у меня ошибка где то в другом месте, но по моему листенеры в этом случае отрабатывают два раза. Сейчас делаю destroyObject и обьявляю MovieClipLoader в начале метода. До результата не добрался еще.

iNils
06.10.2006, 22:17
Я могу напомнить. Например у IE по умолчанию идет только две загрузке одновременно.

sem1313
06.10.2006, 22:34
iNils, по мойму гораздо больше можно одновременно загружать фоток... Если использовать не через getURL... Ведь инициализация загрузки осуществляется Flash'ем, а не Explorer... Хотя фиг знает, но когда то упоминалось что то около 15-18...

vic: я не помню где это было, но было где то месяц назад... если это поможет... в поиске посмотрите...

silin
06.10.2006, 22:36
iNils: но это ведь не значит, что остальные не загрузятся?
во всяком случае все благополучно грузится и для десятка-другого (может и не одновременно, не знаю, как там плагин с браузером разбирается, канеш вопрос.
2vic_ : да как бы ничего с листенерами и не будет: сколько событий(загрузок) столько и вызовов..

vic_
06.10.2006, 22:42
2silin: плохо. я наткнулся на грабли - остановить загрузку нельзя - unloadClip() не останавливает загрузку, следовательно в моем случае загрузчик сработает дважды, ну и понеслась цепочка. Баг, еще год назад постили в livedocs.macromedia

iNils
06.10.2006, 23:06
2 sem1313: Причем тут инициализация? Загрузка идет через IE. Я просто предлагаю попробывать, а не спорить со мной и что то доказывать.
2 silin: Загрузятся, если не будет превышено время ожидания. Ведь не известно, какая скорость будет у пользователя.

Вот пример. Сделал флешку с таким кодом, положил на сайт и вызвал ее.
for (var i=0; i<8; i++){
var snd:Sound = new Sound ()
snd.loadSound("1.mp3?"+ Math.random())
}С помощью плагина httpwatch отслеживаю процесс запросов и загрузки. Запрос на загрузку ушел сразу к 8 файлам. Но! Сначала начали грузились только первые два, видите у них есть время ушедшее на загрузку. Как только загрузился один, сразу начал грузится третий, а после второго четвертый. Остальные стоят в очереди.

silin
06.10.2006, 23:13
спасиб, ценная информация: надо поаккуратнее с этим..

sem1313
06.10.2006, 23:32
iNils, я и не спорю... тем более не доказываю...
Просто помнится мне, что была такая тема, где обсуждалось сколько загрузок одновременно поддерживает FLASH(а не Explorer)... И помойму была озвучена цифра около 20...

iNils
06.10.2006, 23:48
Для пользователей IE

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

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"MaxConnectionsPer1_0Server"=dword:00000014
"MaxConnectionsPerServer"=dword:0000000a
Теперь число одновременных коннектов к серверам 20 и одновременных даунлоадов с одного сервера 10.

sem1313
06.10.2006, 23:58
Забыл пояснить...

Имеется ввиду сколько MovieClipLoader'ов одновременно может отслеживаться/работать...

sem1313
07.10.2006, 00:00
Теперь число одновременных коннектов к серверам 20 и одновременных даунлоадов с одного сервера 10


И что, это нужно будет прописывать каждому посетителю сайта?

iNils
07.10.2006, 00:03
И что, это нужно будет прописывать каждому посетителю сайта?
Тем кому хочется обойти данное ограничение...Например мне :bye:

sem1313
07.10.2006, 00:25
iNils, про одновременную поддержку загрузок в Explorer понятно,... но на сколько я понимаю вопрос состоял в том, сколько loader'ов одновременно может создать Flash и сколько из них он может обрабатывать...

iNils
07.10.2006, 00:39
но на сколько я понимаю вопрос состоял в том, сколько loader'ов одновременно может создать Flash и сколько из них он может обрабатывать...Я думаю автору интересно, не сколько может конкретно сам флеш, а в совокупности с браузером. Если так, тогда разница сколько, если самый распостранный браузер сможет по умолчанию обрабатывать только две загрузки одноврменно. А дальше, как я уже говорил все упирается в скорость пользователя и превышение ожидания сервера.
Если же автора это не интересует, то почему бы не создать 10, 100, 200 загрузок и не посмотреть?

sem1313
07.10.2006, 00:52
Сначала начали грузились только первые два, видите у них есть время ушедшее на загрузку. Как только загрузился один, сразу начал грузится третий, а после второго четвертый. Остальные стоят в очереди.


Ну если по твоему, то браузер "обслужит" все запросы на закачку...
Если так, то остается только один вопрос - сколько закачек сможет обеспечить/обработать Flash...

Вот в этом и состояла суть вопроса... Наверно...

iNils
07.10.2006, 16:54
Ну если по твоему, то браузер "обслужит" все запросы на закачку...
Если так, то остается только один вопрос - сколько закачек сможет обеспечить/обработать Flash...

Вот в этом и состояла суть вопроса... Наверно...
Вопрос стоял так: "разумно и корректно ли инициировать (открывать) одновременно несколько загрузок"

Сделал небольшой тест, loadMovie загрузил одновременно 1225 картинок.

Bar_Duck13
08.10.2006, 00:40
Исходник пожалуйста!

: hr :
06.02.2007, 19:00
iNils, Вы совершенно верно поняли суть вопроса. Интересовала конечно связка flash-браузер. Спасибо! Правильно я понимаю, что время ожидания сервера - это минимальное из двух времен - времени ожидания браузера и параметра timeOut, в настройках сервера? И в какой момент страница считается полностью загруженной - когда прогрузится последний ее элемент? ... в httpwatch что-то не понял какой параметр отвечает за полную загрузку страницы.

__i
06.02.2007, 20:09
Влезу и попробую поставить все точки над i

iNils, прав на счет 2х загрузок одновременно для ИЕ. Про очередь загрузок тоже, причем если одновременно запустить несколько loadClip, или грузить с помощью MovieClipLoader'a одновременно несколько картинок (больше 2 для ИЕ) то вы можете получать статус процесса загрузки только для этих 2 картинок, которые грузятся в текущий момент. У остальных картинок которые находлятся в этой очерди getBytesTotal равен -1 (если я не ошибаюсь, или 0... короче неверный).

Сделал небольшой тест, loadMovie загрузил одновременно 1225 картинок.


он будет грузить хоть мильен, только по 2 одновременно ). лишь бы ресурсов хватило.

В качестве сценарев для загрузки нескольких картинок могу предложить такие варианты:

- Если нужно чтобы просто загрузились картинки, без контроля над этим процессом (отмена загрузки, вывод количества байт/загруженый картинок, еще чего нить). То грузи все одновременно.

- Если нужен контроль над загрузкой по типу "всего загружено картинок/байт", или Нужно прервать процесс загрузки, то лучще всего организовывай свою "внутреннюю", очередь загрузки. Т.е. грузи картинки по очереди, загрузил одну, начинай загрузку следующей. В качестве полного изврата, можешь сделать очередь с двумя потоками загрузки, т.е. теже 2 мовиклиплоадера. %)

Я обычно использую 2й вариант, он более надежный. 1й неконтролируемый ( хотя очень удобный.

: hr :
06.02.2007, 20:34
__i, ну впринципе что в этом варианте

Если нужно чтобы просто загрузились картинки, без контроля над этим процессом (отмена загрузки, вывод количества байт/загруженый картинок, еще чего нить). То грузи все одновременно

мне мешает отменить загрузку? можно для отмены загрузки пройтись по списку, проверить getBytesTotal() на -1 или 0 и отменить загрузку, впринципе...

Жаль нельзя выяснить размер всех картинок в очереди и дальше сделать общий точный прогрессбар.

А про время ожидания сервера можно поподробнее?

__i
07.02.2007, 14:28
можно для отмены загрузки пройтись по списку, проверить getBytesTotal() на -1 или 0 и отменить загрузку, впринципе...

если у тебя есть такой список то не рационально использовать первый способ, он рационален в случае "послал на загрузку-забыл".

bbexp
07.02.2007, 15:37
Жаль нельзя выяснить размер всех картинок в очереди и дальше сделать общий точный прогрессбар.

Почему же нельзя.
Очень даже можно.
каждая загружаемая картинка отдает свои bytesTotal и bytesLoaded
Все это совершенно спокойно сумируется.

: hr :
07.02.2007, 16:20
отдает только тогда, когда к ней обратиться браузер, а до того времени пока первые 2 картинки в IE (и одна в FF, вроде...) не загрузятся - будет стоять в очереди

bbexp
08.02.2007, 12:32
запрос на загрузку, сдается мне, пройдет сразу.
Я неоднократно использовал загрузку нескольких клипов сразу с прелоадером для каждого из них - визуально, по крайней мере я видел, что прогресс идет у всех сразу. Не знаю какая там механика на уровне браузера идет - но повторю ВИЗУАЛЬНО, я вижу прогресс для всех клипов, что позволяет мне думать, что все необходимые данные каждый клип получает сразу.

для примера хотя бы вот эту ссылку посмотрите, (раздел nieuws/inspiratie кликайте для наглядности, если конечно у вас соединение не с космическими скоростями)
http://demo.dcafe.ru/hal2/flash/

Stone
08.02.2007, 13:04
loadMovie в IE работает не по очереди а скопом. точнее очередь как бы зацикливается - первая пара получила чать данных, вторая пара и т.д. и опять с начала и до полной загрузки.
а вот в фоксе вроде это уже не работает. и все загружается по очереди (в фоксе одна загрузка вроде).
а LoadClip работает по очереди везде (IE фокс).

Stone
08.02.2007, 13:07
а таймаут сработает если сервер вообще не будет отвечать какое то время. вроде так.

: hr :
08.02.2007, 15:56
а таймаут сработает если сервер вообще не будет отвечать какое то время. вроде так.

это таймаут браузера, так? а серверный таймаут?

с loadClip/loadMovie щас буду проверять

wvxvw
13.02.2007, 03:03
Есть еще такой момент... Недавно пробовал сделать что-то вроде предзагрузки (просто по ходу работы сайта загружать все картинки, которые там могут встретиться, по списку). Что интересно, класс наследованый от MovieClipLoadera отказался грузить 2 картинки одновременно, даже если начало загрузки было разнесено по времени. При чем загрузка первой картинки прекращалась даже без сообщения об ошибке, так, как будто никто и не собирался ее загружать.
Если на работе будет пару свободных минут, выложу исходник.