|
|
|||||
Регистрация: Apr 2006
Сообщений: 88
|
если говорить о технике программирования на as слышал что конструкция
with object { ... } (особенно если много обращений к св-вам и методам object'а) сильно замедляет алгоритм. for-in так же работает медленнее чем for вообще мне кажется что много-мало сложные функции лучще не полениться, написать самому, нежели исп. встроенные - они медленнее пример был выше про Array.reverse() |
|
|||||
Регистрация: 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. |
|
|||||
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: вообще, дельные советы! |
|
|||||
Кто то тут говорил что своя реверсия массива быстрее работает... [censored]ЧистоЙ ВОДЫ!!! Я целый час извращался... в раза медленее!
А вот недавно узнал что Math.random тоже в 2-3 раза медленее работает чем random. Вот как... Последний раз редактировалось Nirth; 05.06.2006 в 14:06. |
|
|||||
4AM Games
|
Удалил лишние знаки препинания и плохие слова, Скрипун
1) Веди себя культурно,мы в обществе 2) Нервные клетки не востанавливаются
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
Стандартный прием - если порядок обращения к элементам массива не важен, то лучше воспользоваться циклом while с обратной итерацией в условии:
|
|
|||||
Регистрация: 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; } } и соответственно 359 374 359 374 374 358 358 375 374 374 PS Ругаться действительно не хорошо... |
|
|||||
Цитата:
Цитата:
Цитата:
Цитата:
with - это вообще ужасная практика программирования!!!. |
|
|||||
[+4 12.02.07]
|
Народ коли тут все за убыстренее посмотрите этот код скажите что тут заменить чтоб меньше тормозило...
|
Часовой пояс GMT +4, время: 16:30. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|