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

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

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

Регистрация: Apr 2007
Сообщений: 1,369
Мыкыта
Таким кодом НЕ выдасть флеш те цифры, которые стоят между тегами - Вы проверяли хоть, согласно структуре автора?
Ведьмак, автор решит, что ему ближе к сердцу
А вообще да, перегнул палку.


Последний раз редактировалось Molecula; 09.10.2007 в 17:10.
Старый 09.10.2007, 17:18
Мыкыта вне форума Посмотреть профиль Отправить личное сообщение для Мыкыта Найти все сообщения от Мыкыта
  № 12  
Ответить с цитированием
Мыкыта

Регистрация: Mar 2003
Адрес: Россия, Санкт-Петербург
Сообщений: 565
я всего лишь натолкнул на путь истинный, а не написал за автора то что ему надо... в первую очередь надо учится не код писать, а пользоваться справкой!


Последний раз редактировалось Мыкыта; 09.10.2007 в 17:54.
Старый 09.10.2007, 17:20
Mnilionic вне форума Посмотреть профиль Отправить личное сообщение для Mnilionic Найти все сообщения от Mnilionic
  № 13  
Ответить с цитированием
Mnilionic
 
Аватар для Mnilionic

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
Код:
var str = "<block><item>1</item><item>2</item><item>3</item></block>";
var xml = new XML();
xml.ignoreWhite = true;
xml.parseXML(str);

var node = xml.firstChild.firstChild;
while(node){
	trace("значение: " + node.firstChild.nodeValue);
	node = node.nextSibling;
}

Старый 09.10.2007, 17:23
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 14  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от Ведьмак
Код:
while (XMLmenu.firstChild.childNodes[i])
А если узел текстовый? nodeType == 3

add

К чему эти упражнения с while? В байткоде, что while, что for - одно и тоже выходит, а конструкция надежнее:
Код:
for (i=0; i<XMLmenu.firstChild.length; i++)
 ...XMLmenu.firstChild.childNodes[i]


Последний раз редактировалось chingachgoog; 09.10.2007 в 17:27.
Старый 09.10.2007, 17:32
UnOuter вне форума Посмотреть профиль Отправить личное сообщение для UnOuter Найти все сообщения от UnOuter
  № 15  
Ответить с цитированием
UnOuter

Регистрация: Mar 2006
Сообщений: 53
Cпасибо, разобрался, очень помогли!

Старый 09.10.2007, 17:33
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 16  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Не надежнее. Прожорливее при этом, причем в разы.

Старый 09.10.2007, 17:41
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 17  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от __etc
Не надежнее. Прожорливее при этом, причем в разы.
Так как быть с nodeType == 3? Вводить новое условие? Зачем?

Цитата:
Сообщение от Гурский
Следующие ходы, вопреки широко распространенному мнению, никак не влияют на производительность циклов:
1) Замена цикла for на цикл while. Несмотря на то, что цикл while кажется более простым, а, следовательно, и более быстрым, чем for, между ними нет никакой разницы. После компиляции они дают один и тот же байт-код.

Старый 09.10.2007, 17:45
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 18  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Нет, твой конкретный пример прожорливее и никоим образом текстовые ноды не переваривает.

Если пример с while лишь проверяет node на null и обращается по ссылке к следующему, то твой плюсует счетчик, обращается дважды к XMLmenu.firstChild.childNodes (это нефиговая такая процедура, надо заметить), обращается к ноду по индексу (тоже нефиговая процедура, вместо ссылочного обращения), и ещё высчитывает постоянно длину массива.

А у Гурского написано про:

Код:
for (var i = 0;i < 10;i++) {}
и
Код:
var i = 0;while (i < 10) { i++; }

Старый 09.10.2007, 17:51
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 19  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от __etc
Нет, твой конкретный пример прожорливее и никоим образом текстовые ноды не переваривает.
Это почемуже он не переваривает текстовые ноды?
Он не только их переваривает, но и позволяет обратиться к следующим за текстовым нодом узлом, а в примере с while все следующее он уже не увидит.

Цитата:
Сообщение от __etc
и ещё высчитывает постоянно длину массива.
Понятно, что это надо вычислить заранее один раз.

Старый 09.10.2007, 17:55
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 20  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от chingachgoog
Это почемуже он не переваривает текстовые ноды?
Он не только их переваривает, но и позволяет обратиться к следующим за текстовым нодом узлом, а в примере с while все следующее он уже не увидит.
Полный код, пожалуйста.

Потому как я не понял, как решится проблема с nodeValue:


Код:
var str = "<block><item>1</item><item>2</item><item>3</item></block>";
var xml = new XML();
xml.ignoreWhite = true;
xml.parseXML(str);

var node = xml.firstChild.firstChild;
while (node) {
	trace("значение: "+node.firstChild.nodeValue);
	node = node.nextSibling;
}

for (i=0; i<xml.firstChild.childNodes.length; i++) {
	node = xml.firstChild.childNodes[i];
	trace(node.firstChild.nodeValue);
}
А вот заодно тест:

Код:
var str = "<block><item>1</item><item>2</item><item>3</item></block>";
var xml = new XML();
xml.ignoreWhite = true;
xml.parseXML(str);
t = getTimer();
for (j=0; j<100000; j++) {
	node = xml.firstChild.firstChild;
	while (node) {
		node = node.nextSibling;
	}
}
trace(getTimer()-t); // 1028
t = getTimer();
for (j=0; j<100000; j++) {
	n = xml.firstChild.childNodes;
	l = n.length;
	for (i=0; i<l; i++) {
		node = n[i];
	}
}
trace(getTimer()-t); // 1689
Даже со всеми оптимизациями обычный перебор через for медленее в полтора с лишним раза.


Последний раз редактировалось etc; 09.10.2007 в 18:02.
Создать новую тему Ответ Часовой пояс GMT +4, время: 21:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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