![]() |
|
||||||||||
|
|||||
|
Регистрация: Oct 2007
Сообщений: 78
|
всем привет!
по привычке решил сохранять/грузить всякие данные в/из xml. Использую класс XML. при выборке данных из xml (используя конструкции типа *_xml.z[i].@x*) размером 200 кбайт плеер тупо виснет на 15 сек(и потом скрипт останавливается так и не доделав выборку). Если размер xml около 200 байт то плеер виснет где то на 1 секунду.. Ну и вопрос в следующем почему это так медленно происходит работа с xml?? Как можно это дело ускорить? Может отказаться от xml и сохранять/грузить другим способом?? PS: работаю в flashdevelop 3.0 beta7(настроен на flex 3) + использую swf и swc которые создаю в flash ide cs3. |
|
|||||
|
Modus ponens
|
Оптимизируйте свой код, 99% что из-за этого. Размер вполне нормальный.
Т.е. если вы делаете что-то в роде: for(var i:int=0; i<xml..*.(@["blah"]!="foo").length(); i++){
someVar = xml..*.(@["blah"]!="foo")[i];
}
То работать будет в разы медленнее.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 78
|
нет.. к сожалению не из за этого.
код достаточно прост, и даже если оставить так: var length:Number = _xml.l.length();
for (var i:int = 0; i < length; i++)
{
x = parseInt(_xml.l[i].@x);
}
Наверное те кто работал с классом XML должны знать о тормозах. Хотелось бы узнать как можно избежать тормозов........ |
|
|||||
|
Modus ponens
|
Ну так а я вам о чем говорю:
то, что вы делаете в цикле крайне не рационально, вы вызываете методы у динамического объекта, что уже само по себе медлено, но вы при этом вместо того, чтобы скопировать результат в локальную переменную функции после первого вызова продолжаете выполнять ту же медленную операцию еще кучу раз. Попробуйте сравните с тем, что было у вас.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 78
|
да, сделал как вы написали, все равно тормозит - 1 секунда
![]() |
|
|||||
|
Modus ponens
|
Одна секунда - а итераций сколько?
var xml:XML = <data/>;
const node:XML = <l x=""/>;
var arr:Array = [];
var c:int = 0;
while(c < 5000)
{
node.@x = (++c);
xml.appendChild(node.copy());
}
var list:XMLList = xml.l.@x;
var ln:Number = list.length();
var i:int;
var t:int = getTimer();
for (i = 0; i < ln; i++)
{
arr.push(parseInt(list[i]));
}
trace(getTimer() - t);
trace(arr);
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 78
|
хм у меня тоже результат 1-2 мс.
странно...буду разбираться... спасибо! |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|