![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 84
|
Вот засада! У меня xml (не мой) имеет в себе 3564 item`ов, Загрузив всё это дело во flash, и попытавшись просто прогнать их в цикле:
получил ошибку: Цитата:
Последний раз редактировалось me2; 28.08.2008 в 18:47. |
|
|||||
|
эт такая защита флеша от повисания)
очевидно что твой цикл работает слишком долго. и немного смущает .length() понится это свойство а ни метод. хотя может я не прав Последний раз редактировалось ramshteks; 28.08.2008 в 18:18. |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 84
|
дада, из-за length() вся проблема и возникла.
решилось так: рано я паниковать начал =)) |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 84
|
нитуттобыло. любой вызов методов в этом цикле вешает скрипт наглухо.
Даже такой: что, где не так? неужели флеш не умеет работать с большими XML? Последний раз редактировалось me2; 28.08.2008 в 18:57. |
|
|||||
|
а вы умеете работать с ХМЛ?
может проблема в этом? |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 84
|
пока справлялся.
а ты умеешь? если да, то буду очень даже благодарен за любой адекватный совет. |
|
|||||
|
[+1 25.07.08]
|
а с помощью for each не легче цикл по XML гонять? не надо придумывать дополнительных переменных типа len и z...
что-то типа того. |
|
|||||
|
стервочка (я мужик)
|
все переменные определим заранее, для чистоты эксперимента.
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 );
* + list for each for each разница в пару миллисекунд на тысяче итераций, можно опустить. итог: тоесть, да, Вы не умеете работать с XML. |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 84
|
tyapichu легче конечно. Я сюда запостил то что первое "подвернулось под голову".
BloodHound спасибо за то что откликнулся и даже потратил время, но прости я не понял что ты пытался объяснить? =) Ты гоняешь по огромному циклу вот этот XML? "<xml><x /><x /><x /></xml>" И пытаешься тучу раз его парсить? Конечно же результаты будут в милисекунды на любом способе. (1 в три раза дольше, да) Попробуй прочитать мой первый пост, и понять, что дело имеется с огромным массивом данных. ~200kb, с кучей вложений и так далее. Любое действие не в цикле с таким XML занимает некоторое время. Попробуй погоняй эти тесты на чём то действительно большом, и тогда быть может мы оба будем знать чуточку больше ![]() P.s. Проблему я решил, разбив данные на части, всё работает достаточно быстро. |
|
|||||
|
что то мне не удалось предыдущий пост отредактировать. прошу прощения в нем был не прав!
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:14. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|