Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.07.2008, 20:11
kia007 вне форума Посмотреть профиль Отправить личное сообщение для kia007 Найти все сообщения от kia007
  № 1  
Ответить с цитированием
kia007

Регистрация: Oct 2007
Сообщений: 78
Cool очень меденная работа с xml

всем привет!
по привычке решил сохранять/грузить всякие данные в/из 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.

Старый 30.07.2008, 20:21
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Оптимизируйте свой код, 99% что из-за этого. Размер вполне нормальный.
Т.е. если вы делаете что-то в роде:
Код:
for(var i:int=0; i<xml..*.(@["blah"]!="foo").length(); i++){
someVar = xml..*.(@["blah"]!="foo")[i];
}
вместо:
Код:
var xmll:XMLList = xml..*.(@["blah"]!="foo");
var i:int;
var l:int = xmll.length();
for(i=0; i<l; i++){
someVar = xmll[i];
}
То работать будет в разы медленнее.
__________________
Hell is the possibility of sanity

Старый 30.07.2008, 20:47
kia007 вне форума Посмотреть профиль Отправить личное сообщение для kia007 Найти все сообщения от kia007
  № 3  
Ответить с цитированием
kia007

Регистрация: Oct 2007
Сообщений: 78
нет.. к сожалению не из за этого.
код достаточно прост, и даже если оставить так:
Код:
var length:Number = _xml.l.length();
for (var i:int = 0; i < length; i++)
{							
      x = parseInt(_xml.l[i].@x);
}
то все равно тормозит. Если строку в цикле закомментировать, то все выполняется моментально.

Наверное те кто работал с классом XML должны знать о тормозах. Хотелось бы узнать как можно избежать тормозов........

Старый 30.07.2008, 21:43
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну так а я вам о чем говорю:
то, что вы делаете в цикле крайне не рационально, вы вызываете методы у динамического объекта, что уже само по себе медлено, но вы при этом вместо того, чтобы скопировать результат в локальную переменную функции после первого вызова продолжаете выполнять ту же медленную операцию еще кучу раз.
Код:
var xml:XML = 
<data>
	<l x="0"/>
	<l x="1"/>
	<l x="2"/>
	<l x="3"/>
	<l x="4"/>
	<l x="5"/>
	<l x="6"/>
	<l x="7"/>
	<l x="8"/>
	<l x="9"/>
</data>;

var list:XMLList = xml.l.@x;
var ln:Number = list.length();
var i:int;
for (i = 0; i < ln; i++)
{							
      trace(parseInt(list[i]));
}
Попробуйте сравните с тем, что было у вас.
__________________
Hell is the possibility of sanity

Старый 30.07.2008, 22:16
kia007 вне форума Посмотреть профиль Отправить личное сообщение для kia007 Найти все сообщения от kia007
  № 5  
Ответить с цитированием
kia007

Регистрация: Oct 2007
Сообщений: 78
да, сделал как вы написали, все равно тормозит - 1 секунда

Старый 30.07.2008, 22:41
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Одна секунда - а итераций сколько?
Код:
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);
у меня результат - 2 миллисекунды для 5К операций (больше сложно попробывать т.как заполнение ХМЛя гораздо более ресурсоемкая процедура.
__________________
Hell is the possibility of sanity

Старый 31.07.2008, 14:49
kia007 вне форума Посмотреть профиль Отправить личное сообщение для kia007 Найти все сообщения от kia007
  № 7  
Ответить с цитированием
kia007

Регистрация: Oct 2007
Сообщений: 78
хм у меня тоже результат 1-2 мс.
странно...буду разбираться...
спасибо!

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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