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

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

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

Регистрация: Jan 2008
Сообщений: 84
По умолчанию огромный 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.
Вобщем чё делать то? где я не прав?


Последний раз редактировалось me2; 28.08.2008 в 18:47.
Старый 28.08.2008, 18:15
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 2  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
эт такая защита флеша от повисания)
очевидно что твой цикл работает слишком долго.

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


Последний раз редактировалось ramshteks; 28.08.2008 в 18:18.
Старый 28.08.2008, 18:19
me2 вне форума Посмотреть профиль Отправить личное сообщение для me2 Найти все сообщения от me2
  № 3  
Ответить с цитированием
me2

Регистрация: Jan 2008
Сообщений: 84
дада, из-за length() вся проблема и возникла.
решилось так:
Код:
var len=fondsXML.elements('*').length();
for(var z:int=0;z<len;z++){}
рано я паниковать начал =))

Старый 28.08.2008, 18:37
me2 вне форума Посмотреть профиль Отправить личное сообщение для me2 Найти все сообщения от me2
  № 4  
Ответить с цитированием
me2

Регистрация: Jan 2008
Сообщений: 84
нитуттобыло. любой вызов методов в этом цикле вешает скрипт наглухо.
Даже такой:
Код:
var len=fondsXML.elements('*').length();
for(var z:int=0;z<len;z++){
var innerXML:XML=XML(fondsXML.elements('*')[z]);
}
что, где не так? неужели флеш не умеет работать с большими XML?


Последний раз редактировалось me2; 28.08.2008 в 18:57.
Старый 28.08.2008, 18:51
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 5  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
а вы умеете работать с ХМЛ?
может проблема в этом?

Старый 28.08.2008, 18:58
me2 вне форума Посмотреть профиль Отправить личное сообщение для me2 Найти все сообщения от me2
  № 6  
Ответить с цитированием
me2

Регистрация: Jan 2008
Сообщений: 84
пока справлялся.
а ты умеешь? если да, то буду очень даже благодарен за любой адекватный совет.

Старый 28.08.2008, 20:04
tyapichu вне форума Посмотреть профиль Отправить личное сообщение для tyapichu Найти все сообщения от tyapichu
  № 7  
Ответить с цитированием
tyapichu
[+1 25.07.08]

Регистрация: Jun 2008
Адрес: Москва
Сообщений: 25
Отправить сообщение для tyapichu с помощью ICQ
а с помощью for each не легче цикл по XML гонять? не надо придумывать дополнительных переменных типа len и z...

что-то типа того.
Код:
for each (var map:XML in XML_data..map)
{
	map.@name = name;
}

Старый 28.08.2008, 20:47
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 8  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
все переменные определим заранее, для чистоты эксперимента.
Код:
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.

Старый 28.08.2008, 21:35
me2 вне форума Посмотреть профиль Отправить личное сообщение для me2 Найти все сообщения от me2
  № 9  
Ответить с цитированием
me2

Регистрация: Jan 2008
Сообщений: 84
tyapichu легче конечно. Я сюда запостил то что первое "подвернулось под голову".

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

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

Старый 28.08.2008, 21:58
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 10  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
что то мне не удалось предыдущий пост отредактировать. прошу прощения в нем был не прав!

Код:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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