Создал эту тему просто, чтобы поделиться опытом своих заблуждений)
Несколько раз читал разные блоги и сайты по оптимизации приложений, и последний раз читал статью Дэниэла по оптимизации кода в старлинге.
Сам код для потимизации 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