Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   default timeout period of 15 seconds (http://www.flasher.ru/forum/showthread.php?t=115403)

me2 28.08.2008 18:03

огромный XML и default timeout period of 15 seconds
 
Вот засада! У меня xml (не мой) имеет в себе 3564 item`ов, Загрузив всё это дело во flash, и попытавшись просто прогнать их в цикле:
Код:

for(var z:int=0;z<fondsXML.elements('*').length();z++){}
получил ошибку:
Цитата:

A script has executed for longer than the default timeout period of 15 seconds.
Вобщем чё делать то? где я не прав?

ramshteks 28.08.2008 18:15

эт такая защита флеша от повисания)
очевидно что твой цикл работает слишком долго.

и немного смущает .length() понится это свойство а ни метод.
хотя может я не прав

me2 28.08.2008 18:19

дада, из-за length() вся проблема и возникла.
решилось так:
Код:

var len=fondsXML.elements('*').length();
for(var z:int=0;z<len;z++){}

рано я паниковать начал =))

me2 28.08.2008 18:37

нитуттобыло. любой вызов методов в этом цикле вешает скрипт наглухо.
Даже такой:
Код:

var len=fondsXML.elements('*').length();
for(var z:int=0;z<len;z++){
var innerXML:XML=XML(fondsXML.elements('*')[z]);
}

что, где не так? неужели флеш не умеет работать с большими XML?

ramshteks 28.08.2008 18:51

а вы умеете работать с ХМЛ?
может проблема в этом?

me2 28.08.2008 18:58

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

tyapichu 28.08.2008 20:04

а с помощью for each не легче цикл по XML гонять? не надо придумывать дополнительных переменных типа len и z...

что-то типа того.
Код:

for each (var map:XML in XML_data..map)
{
        map.@name = name;
}


BlooDHounD 28.08.2008 20:47

все переменные определим заранее, для чистоты эксперимента.
Код:

var xml:XML = <xml><x /><x /><x /></xml>;

var t:Number;
var i:uint;
var j:uint;

var l:uint;

var test:XML;
var list:XMLList;

t = getTimer();
for ( i=0; i<1E5; i++ ) {
        l = xml.elements("*").length();
        for ( j=0; j<l; j++ ) {
                test = XML( xml.elements("*")[j] );
        }
}
trace( "elements + XML = ", getTimer() - t );

t = getTimer();
for ( i=0; i<1E5; i++ ) {
        // заменим elements("*") просто на *.
        // теже яйца, только вид сбоку
        l = xml.*.length();
        for ( j=0; j<l; j++ ) {
                test = XML( xml.*[j] );
        }
}
trace( "* + XML = ", getTimer() - t );


t = getTimer();
for ( i=0; i<1E5; i++ ) {
        l = xml.*.length();
        for ( j=0; j<l; j++ ) {
                // уберём XML. зачем из XML создавать новый XML не понятно
                // если бы ла нужна конвертация, то надо было использовать оператор as.
                // но тут она незачем, так как это E4X
                test = xml.*[j];
        }
}
trace( "* = ", getTimer() - t );

t = getTimer();
for ( i=0; i<1E5; i++ ) {
        // вынесем наш спиок зарание в начало
        list = xml.*;
        l = list.length();
        for ( j=0; j<l; j++ ) {
                test = list[j];
        }
}

trace( "* + list = ", getTimer() - t );

t = getTimer();
for ( i=0; i<1E5; i++ ) {
        // поиграемся в for each
        for each ( test in xml.* ) {
                // собственно тут всё ...
        }
}

trace( "for each = ", getTimer() - t );

t = getTimer();
for ( i=0; i<1E5; i++ ) {
        list = xml.*;
        for each ( test in list ) {
                // собственно тут всё ...
        }
}

trace( "for each + list = ", getTimer() - t );

получили, что 3 самый быстрых варианта, практических равных по скорости:
* + list
for each
for each

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

итог: тоесть, да, Вы не умеете работать с XML.

me2 28.08.2008 21:35

tyapichu легче конечно. Я сюда запостил то что первое "подвернулось под голову".

BloodHound спасибо за то что откликнулся и даже потратил время, но прости я не понял что ты пытался объяснить? =)
Ты гоняешь по огромному циклу вот этот XML? "<xml><x /><x /><x /></xml>"
И пытаешься тучу раз его парсить? Конечно же результаты будут в милисекунды на любом способе. (1 в три раза дольше, да)
Попробуй прочитать мой первый пост, и понять, что дело имеется с огромным массивом данных. ~200kb, с кучей вложений и так далее.
Любое действие не в цикле с таким XML занимает некоторое время.
Попробуй погоняй эти тесты на чём то действительно большом, и тогда быть может мы оба будем знать чуточку больше ;)

P.s.
Проблему я решил, разбив данные на части, всё работает достаточно быстро.

ramshteks 28.08.2008 21:58

что то мне не удалось предыдущий пост отредактировать. прошу прощения в нем был не прав!

Код:

var xml:XML = <xml>...их тут очень много около 4000<x/></xml>;

var t:Number;
var i:uint;
var j:uint;

var l:uint;

var test:XML;
var list:XMLList;

t = getTimer();
//for ( i=0; i<1E5; i++ ) {
        l = xml.elements("*").length();
        for ( j=0; j<l; j++ ) {
                test = XML( xml.elements("*")[j] );
        }
//}
trace(j+ "  elements + XML = ", getTimer() - t );


тест показал на моей машине:
3890 elements + XML = 12573

Вывод:BloodHound вы не правы, человек умеет работать с хмл просто действительно машина подвисает на данной операции.

ramshteks 28.08.2008 22:17

Вложений: 1
хм использование for each на той же хмл дало следующий результат. кажется мне придется взять свои слова обратно.

3890 elements + XML = 6


----------------------------------------

тестирование всеми алгоритмами дало такой результат

3890 elements + XML = 5
* + XML = 12580
* = 12567
* + list = 4
for each = 2
for each + list = 4

код в прикреплении


что называется no comments...

BlooDHounD 28.08.2008 22:50

me2, а вы пробовали подумать, какая разница между гонять цикл 1К раз, между гонять цикл с большим количеством элементов? я я вам скинул тесты скорости работы, разных подходов.

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

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

как видно из "вовремя" сделанных выводов ramshteks, оборачивания в циклы всего лишь сглаживают кривые роста времени выполнения алгоритмов.

ramshteks 28.08.2008 23:05

Цитата:

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

как видно из "вовремя" сделанных выводов ramshteks, оборачивания в циклы всего лишь сглаживают кривые роста времени выполнения алгоритмов.

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

me2 29.08.2008 02:52

BloodHound ну ты пойми, не стоит задача у меня отпрасить xml во что либо, и какой метод избрать. Это вообще должно обсуждаться отдельно. Тема ведь не названа "как быстро отпрасить xml"?=)
Тема о том, что флеш не может за раз ворочать большими xml данными.
Сейчас у меня 800kb XMLa (статистика посещений, куча вложенной информации)
Такую дуру у меня вообще ни один способ прокрутить не может за раз. А ведь данных будет только прибавляться. Выход прост, запускать обработку данных последовательно, пакетами, не привязываясь к циклам.
В этоге - всё работает, задача решена. Единственный минус - нужно немного подождать, но это абсолютно адекватно для таких размеров.
p.s.
Выводы делать нужно имея максимум информации. Hint: 1 пост это не максимум.

ramshteks 29.08.2008 04:24

me2 если у тебя конечно есть такая возможность: может стоит разделить хмл. ведь смотри 800кб данных довольно много для хмл. и я уверен подгрузив их и распарсив они скорее всго просто не используются даже на 50%
так может стоит разделить и по мере надобности подгружать?
ну это опять таки если есть возможость

etc 29.08.2008 10:29

Цитата:

Сообщение от me2 (Сообщение 760988)
Выход прост, запускать обработку данных последовательно, пакетами, не привязываясь к циклам.

Информацию надо подгружать по мере надобности, вы все равно все 800 кб данных на экран одновременно вывести не можете.

BlooDHounD 29.08.2008 12:37

me2, Вы какие-то особенные места обитания вашего мозга обнаружили, до которых не достучаться? Ваш подход работает в несколько тысяч раз медленнее, а Вы меня парите какими-то первыми постами. дело не в "каких-то" действиях, а в полне конкретных. и эти действия ваши. я не приводил Вам примеры серилизаторов, я привёл вам сравнительные анализы скорости именно парсинга, но кажется это бесполезно. удачи вам.

me2 29.08.2008 17:35

__etc можно вывести. если это допустим график за определенный период. масштабируемый и всё такое. (что в данном случае и делается)
BloodHound. конечно это бесполезно. это ты паришь меня совершенно ненужными тестами. Решил будто знаешь мой подход. Доказываешь очевидные f1. Твои примеры не помогли полностью, но полюбому спасибо за участие. Нагрузка спала втрое. И давай ка побольше позитива, ага.

BlooDHounD 29.08.2008 20:06

me2, утю-путю ... не расстраивайтесь от того что я Вас запарил :) написанное Вами в примерах и является показателем, того как Вы это сделали. на сколько я понимаю всё остальное написано так же криво.

я из принципа сделал XML состоящий из 8K. в каждом ноде у меня лежало ещё по 300 нодов. тоесть 8000 * 300 = 2 400 000 нодов. этот XML у меня весил ~6Mb. он у меня распарсился за 40 мс. это наверно чудо. и мне кажется это гораздо быстрее чем 15 секунд, как Вы считаете?

Chas 29.08.2008 20:21

2me2: вы это... не обращаейте внимание на стиль BloodHound. У него работа нервная. Человек он это... хороший. =) Советы дельные дает.

ramshteks 29.08.2008 20:25

2Chas: ни какая работа и ни какой опыт и знания не дают права на хамство.
хотя кого это волнует когда тебе есть что ответить на любой вопрос. да и понятие хамства у всех разное.

BlooDHounD 29.08.2008 20:51

Chas, работа нервная, а человек я ужасный :)
ramshteks, никакого хамства ... мысли вслух. просто есть 2 категории людей: одни что думают, то и говорят, а другие терпят других людей, и тягают у себя на шеи.

ramshteks 29.08.2008 21:13

BlooDHounD, просто я считаю что ваш опыт не должен передаваться другим людям в такой форме. Достаточно грубой, думаю со мной многие согласяться.
Я уважаю Ваш опыт и знания, и по вам видно что вы достаточно "крутой" :D

Но не все на таком уровне, многим нужно еще много работать, а многие никогда и не достигнут его. Я просто к тому что стоит пожалуй относиться с большим пониманием к некомпетентности остальных, ведь и вы когда то были таким.

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

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

BlooDHounD 29.08.2008 21:41

Цитата:

Сообщение от ramshteks (Сообщение 761138)
BlooDHounD, просто я считаю что ваш опыт не должен передаваться другим людям в такой форме. Достаточно грубой, думаю со мной многие согласяться.

грубой или жестокой?
Цитата:

Сообщение от ramshteks (Сообщение 761138)
Я уважаю Ваш опыт и знания, и по вам видно что вы достаточно "крутой" :D

я не крутой я рыжий %)
Цитата:

Сообщение от ramshteks (Сообщение 761138)
Но не все на таком уровне, многим нужно еще много работать, а многие никогда и не достигнут его. Я просто к тому что стоит пожалуй относиться с большим пониманием к некомпетентности остальных, ведь и вы когда то были таким.

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

Сообщение от ramshteks (Сообщение 761138)
Я постаянно работаю над тем чтоб стать лучше и чем больше занимаюсь, тем больше понимаю что до желаемого уровня еще очень далеко. Кто знает может я когда нибудь буду работать рукой об руку с вами в тайм зироу или стану конкурентом ваше канторе... ну это я уже замечтался :D но сейчас я много не знаю и не стоит относится пренебрежительно ко мне из за моих незнаний...

главное в чевловеке, который ищет знаний: терпение, умение запоминать свои ошибки, умение использовать их в будущем, смелось в решениях (например взять и переписать, то что писал год), искать решение до последнего и умение отстаивать своё мнение.
Цитата:

Сообщение от ramshteks (Сообщение 761138)
Я конечно понимаю что вас не перевоспитать. Но я пожалуй отношусь к первой группе людей, и поэтому не высказаться не могу.

ну если это правда, тогда не понимаю чем Вас смущают мои метафоры.

ramshteks 29.08.2008 22:19

Цитата:

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

BlooDHounD 29.08.2008 22:30

ramshteks, а причём тут агрессия? борьба заставляет человека мыслить. вот Вы противостоя мне как никак но придумали красивый текст, почему "так" а не "этак". и это вам плюс. а если у человека не взыграет самолюбие и он не докажет свою точку зрения, то он сам ничему не научится. и в следущий раз при приёме на работу, на вопрос, "почему?", он либо ответит не знаю, либо скажет "я так решил". оба варианта неправильны.

ramshteks 29.08.2008 22:39

всю жизнь работаю фрилансером, один раз ходил на собеседование, ответил чт мне интересно. Потом два дня делал тестовое задание - сделал, сказали хорошо и отказали потому что я студент очник и вроде как не смогу на полный день. было обидно!А сейчас задался вопрос а правильным л был ответ: "интересно"... вполне возможно нет ))
хм... мне кажется мы друг друга поняли, ну по крайней мере я вашу точку зрения понял)

AL.exe 29.08.2008 23:33

Цитата:

Сейчас у меня 800kb XMLa (статистика посещений, куча вложенной информации)
Такую дуру у меня вообще ни один способ прокрутить не может за раз. А ведь данных будет только прибавляться. Выход прост, запускать обработку данных последовательно, пакетами, не привязываясь к циклам.
Может, имеет смысл перейти на менее избыточные форматы? Thrift, Protocol Buffers 2, ну, или, на худой конец, JSON...

etc 30.08.2008 01:25

После этого поста флейма больше не будет.

me2 30.08.2008 14:03

AL.exe в этом проекте я просто делаю флеш и не контролирую то что мне в него приходит. =)

AL.exe 30.08.2008 17:26

А, ну тода да :) Обидно :)


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

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