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

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

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

Регистрация: Apr 2006
Сообщений: 88
если говорить о технике программирования на as слышал что конструкция
with object {
...
}
(особенно если много обращений к св-вам и методам object'а) сильно замедляет алгоритм.
for-in так же работает медленнее чем for
вообще мне кажется что много-мало сложные функции лучще не полениться, написать самому, нежели исп. встроенные - они медленнее
пример был выше про Array.reverse()

Старый 05.06.2006, 08:14
JhAZZ вне форума Посмотреть профиль Отправить личное сообщение для JhAZZ Посетить домашнюю страницу JhAZZ Найти все сообщения от JhAZZ
  № 12  
Ответить с цитированием
JhAZZ

Регистрация: Aug 2002
Адрес: Новосибирск
Сообщений: 38
Вот что я вынес из своей работы со флэшем
1. Функции надо вызывать как можно реже. Вобщем, как в ассемблере. Лучше 50 строчек кода накопировать, чем сделать цикл от 1 до 50

2. Обращение к хэшу локальных переменных быстрее чем к глобальным и уж тем более выше, если используется поиск в подхэшах. Потому при передаче данных через аргумент функции (как в примере вверху) все быстрее происходит. Хэш-то получается из одной переменной состоит. Вобщем локальные переменные адресуются быстрее.

3. Лучше создавать промежуточные переменные для хранения адресов на хэш. То есть обращение типа
xxx.tr.mx.v+=xxx.tr.mx.dv

лучше привести к следующему:
var mx:Object=xxx.tr.mx;
mx.v+=mx.dv;

тем самым мы избавляемся от двух хэш-поисков. Конечно во флэше все супермегаоптимизировано, но когда речь идет о перелопачивании огромных массивов каждое бегание по индексам хэшей вызывает тормоза.

4. От длины имен переменных или функций скорость почти не зависит. Это просто best practice. Все равно все "имена" индексируются и к ним обращаются не по имени, а по цифрам индексов хэшей.

5. for in работает тормозно
6. Array.length тормозной, так что лучше сначала узнать его длину в переменную перед началом цикла
7. Жалеть память броузера зрителя и делать delete неиспользуемых объектов не нужно - все равно никто не оценит. Поэтому например если надо очистить Array - проще взять и переприсвоить ему new Array();
8. with притормаживает, потому что бегает по with-хэшу, затем по localvar-хэшу, затем по this-хэшу . Одним беганием больше. А ведь в this и with сидят ключи не только переменных, но и функций.

Мои выводы зиждятся на собственных наблюдениях и курсах программирования, где мы делали элементарные бинарные индексы
__________________
JhAZZ


Последний раз редактировалось JhAZZ; 05.06.2006 в 08:25.
Старый 05.06.2006, 10:51
heilong вне форума Посмотреть профиль Отправить личное сообщение для heilong Посетить домашнюю страницу heilong Найти все сообщения от heilong
  № 13  
Ответить с цитированием
heilong
 
Аватар для heilong

Регистрация: Dec 2005
Адрес: Moscow
Сообщений: 84
Отправить сообщение для heilong с помощью ICQ
1. про фунцкии верно, а unroll-нуть цикл в 50 строчек это уж совсем last resort для самого inner loop-а

4. мне казалось, best practice это разумный компромисс между длиной имён и их осмысленностью. в институте нас учили "переменные должны иметь мнемонические названия"

7. мне кажется, это неважно, т.к. в любом случае или сам их удалишь, или рано или поздно garbage collector их удалит

for in и with почти не использую. с with-ом вообще стрёмно, его разве что для Drawing API можно использовать, хотя мне сделать var p = my_movie_clip; p.beginFill(... не влом.

JhAZZ: вообще, дельные советы!

Старый 05.06.2006, 13:50
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 14  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
Кто то тут говорил что своя реверсия массива быстрее работает... [censored]ЧистоЙ ВОДЫ!!! Я целый час извращался... в раза медленее!

А вот недавно узнал что Math.random тоже в 2-3 раза медленее работает чем random. Вот как...


Последний раз редактировалось Nirth; 05.06.2006 в 14:06.
Старый 05.06.2006, 14:07
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 15  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Удалил лишние знаки препинания и плохие слова, Скрипун
1) Веди себя культурно,мы в обществе
2) Нервные клетки не востанавливаются
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 05.06.2006, 18:01
Бармалей вне форума Посмотреть профиль Отправить личное сообщение для Бармалей Посетить домашнюю страницу Бармалей Найти все сообщения от Бармалей
  № 16  
Ответить с цитированием
Бармалей
 
Аватар для Бармалей

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 784
Отправить сообщение для Бармалей с помощью ICQ
Стандартный прием - если порядок обращения к элементам массива не важен, то лучше воспользоваться циклом while с обратной итерацией в условии:
Код:
var i = my_array.lendth;
for(i--){
	// здесь действия над элементом массива my_array[i]
}
__________________
Garbage Collector || AIR (Apollo) Docs

Старый 05.06.2006, 19:01
KPaul вне форума Посмотреть профиль Отправить личное сообщение для KPaul Найти все сообщения от KPaul
  № 17  
Ответить с цитированием
KPaul
 
Аватар для KPaul

Регистрация: Nov 2005
Сообщений: 221
to Скрипун
Если этот "кто-то" - я, то многое может зависеть от машины и версии плеера. (Возможно если машина довольно быстрая, то разница будет минимальная). У меня целик 1800, плеер 8,0,22,0.
Следующий код (в руте) давал довольно разные по значениям листинги:
Код:
var arr = [];
for(var i=0; i<200000; i++){
	arr[i] = 1; 
}
var c=0;
this.onEnterFrame = function(){
	if(c>=9){
		delete this.onEnterFrame;
	}
	c++;
	var time1 = new Date().getTime();
	arr.reverse();
	//reverse(arr);
	var time2 = new Date().getTime();
	var result = time2-time1;
	trace(result);

}

function reverse(a:Array){
	var l = 0;
	var r = a.length-1;
	var t;
	while(l<r){
		t = a[l];
		a[l] = a[r];
		a[r] = t;
		++l;
		--r;
	}
}
2634 3008 2977 3008 2992 3008 2961 2945 3024 3008
и соответственно 359 374 359 374 374 358 358 375 374 374
PS Ругаться действительно не хорошо...

Старый 05.06.2006, 19:20
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 18  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
P4 3000 (HT)

родной: 1107, 1217, 1170, 1186, 1372, 1310, 1201, 1217, 1201, 1201

кустарный: 265, 249, 265, 266, 249, 265, 250, 249, 250, 265
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
Цитата:
Сообщение от JhAZZ
Вот что я вынес из своей работы со флэшем
1. Функции надо вызывать как можно реже. Вобщем, как в ассемблере. Лучше 50 строчек кода накопировать, чем сделать цикл от 1 до 50
это логично само по себе, во время цикла у тебя выполняеться "лишние" операции (увеличили счетчик, произвели сравнение, переместили "указатель" выполнямого кода)
Цитата:
Сообщение от JhAZZ
5. for in работает тормозно
Естественно, также если задать в качестве индекса у массива не целые числа....

Цитата:
Сообщение от JhAZZ
6. Array.length тормозной, так что лучше сначала узнать его длину в переменную перед началом цикла
Array.length не тормозной, он нормальный, каким и должен быть, тормозит это потом что на каждом шаге цикла ты вызываешь эту пропертю(функцию), естественно время тратиться больше.

Цитата:
Сообщение от JhAZZ
8. with притормаживает, потому что бегает по with-хэшу, затем по localvar-хэшу, затем по this-хэшу . Одним беганием больше. А ведь в this и with сидят ключи не только переменных, но и функций.

with - это вообще ужасная практика программирования!!!.

Старый 23.08.2006, 08:31
MrKIT вне форума Посмотреть профиль Отправить личное сообщение для MrKIT Найти все сообщения от MrKIT
  № 20  
Ответить с цитированием
MrKIT
[+4 12.02.07]

Регистрация: Apr 2006
Сообщений: 91
Отправить сообщение для MrKIT с помощью ICQ
Народ коли тут все за убыстренее посмотрите этот код скажите что тут заменить чтоб меньше тормозило...
Вложения
Тип файла: rar англ2.rar (13.0 Кб, 30 просмотров)

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

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

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


 


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


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