Показать сообщение отдельно
Старый 12.03.2013, 15:31
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 76  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Цитата:
Сообщение от nuToH Посмотреть сообщение
//сарказм.
вот цикл для профи:
один вызов геттера length, супербыстрая математика!
Код AS3:
for (var i:int = arr.length; (i=~-i)^-1; ) {
trace(arr[i]);
}
Чёта он ни разу не супербыстрый....

Код AS3:
 
t = getTimer();
for (i = 1000000; (i=~-i)^-1; ) {
}
tf.appendText(getTimer() - t + "\n"); // 8 мс
 
t = getTimer();
for (i = 0; i < 1000000; i++) {
}
tf.appendText(getTimer() - t + "\n"); // 3 мс
Классический вариант более чем в два раза быстрее.


P.S.
Хотя стоп, туплю... Если у нас getter, а не константа то картина несколько другая:

Код AS3:
 
t = getTimer();
for (i = arr.length; (i=~-i)^-1; ) {
}
tf.appendText(getTimer() - t + "\n"); // 7
 
t = getTimer();
for (i = 0; i < arr.length; i++) {
}
tf.appendText(getTimer() - t + "\n"); // 7
Как можно заметить - результаты равны.

НО, если сделать так (ниже), то получается вообще самый-самый быстрый вариант:

Код AS3:
 
t = getTimer();
for (i = arr.length; i >= 0; i--) {
}
tf.appendText(getTimer() - t + "\n"); // 2 мс


Последний раз редактировалось FlashRus; 12.03.2013 в 15:42.