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

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

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
По умолчанию Заблуждения в оптимизации

Создал эту тему просто, чтобы поделиться опытом своих заблуждений)

Несколько раз читал разные блоги и сайты по оптимизации приложений, и последний раз читал статью Дэниэла по оптимизации кода в старлинге.
Сам код для потимизации stage3d оставлю, меня заинтересовало то, что он рекомендовал избегать использования for each циклов, и заменять их на for var i:int ...
Но мои замеры показали, что разница в скорости между этими циклами составляет почти 3 раза! Причем совсем не в пользу вторых.

Тест содержит ошибку, ответ здесь
Вот мой тест на 10 миллионах объектов
Код AS3:
// создаем 10 миллионов объектов с одним свойством
var array:Array = []
for (var i:int = 0; i < 10000000; i++) {
	array.push( { t: 1 } );
}
 
var length:int = array.length;
var obj:Object = null;
var time:int = getTimer();
for (i = 0; i < length; i++) {
	obj = array[i];
	obj.t = 0;
}
trace("FOR i", getTimer() - time); // 1554
time = getTimer();
for each (obj in array) {
	obj.t = 0;
}
trace("FOR EACH", getTimer() - time); // 671
Но если тут я сам и ожидал примерно такого результата, то вот хорошей скорости работы от Math методов точно не ожидал. А оказалось, что они лишь немного проигрывают в скорости инлайнам. И ощутимо это только на огромном количестве итераций.
Вот еще пример
Код AS3:
public function MathCrap() {
 
 
	var number:Number = -14;
	var i:int = 0;
	var result:Number = 0;
	var time:int = 0;
 
	time = getTimer();
	for (i = 0; i < 10000000; i++) {
		result = Math.abs(number);
	}
	trace("Math.abs()", getTimer() - time); 
	time = getTimer();
	for (i = 0; i < 10000000; i++) {
		result = abs(number);
	}
	trace("Inline abs", getTimer() - time);
	trace("CEIL >>>");
	number = 1.5;
	time = getTimer();
	for (i = 0; i < 10000000; i++) {
		result = Math.ceil(number);
	}
	trace("Math.ceil()", getTimer() - time); 
	time = getTimer();
	for (i = 0; i < 10000000; i++) {
		result = ceil(number);
	}
	trace("Inline ceil", getTimer() - time);
 
}
[Inline]
public static function abs(value:Number):Number {
	return value > 0 ? value : -value;
}
[Inline]
public static function ceil(value:Number):int {
	return int(value) + 1;
}
Результат такой:
Код AS3:
Math.abs() 1328
Inline abs 1139
CEIL >>>
Math.ceil() 1348
Inline ceil 1139
То есть совсем незначительная разница, хотя я расчитывал увидеть цифры раза в 2, а то и в 3 различающиеся. Видимо Адоби хорошо поработали над оптимизацией кода в ASC 2.0
__________________
Ко мне можно и нужно обращаться на ты)


Последний раз редактировалось caseyryan; 26.02.2016 в 09:15.
Создать новую тему   Часовой пояс GMT +4, время: 23:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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