Показать сообщение отдельно
Старый 24.02.2016, 11:41
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Обычно each-циклы не рекомендуют использовать из-за того, что не гарантируется порядок обхода. А по скорости ни разу не встречал таких рекомендаций.
Да. Но он там говорил именно о скорости работы, поэтому меня это и заинтересовало. Так как я всегда был уверен что for in и for each in гораздо быстрее упорядоченных циклов
Вот цитата Дэниэла
Цитата:
Loops

When working with loops that are repeated very often or are deeply nested, it's better to avoid “for each”; the classic “for i” yields a better performance. Furthermore, beware that the loop condition is executed once per loop, so it's faster to save it into an extra variable.
Цитата:
Сообщение от i.o. Посмотреть сообщение
Результаты в DEBUG и RELEASE версиях плеера могут сильно отличаться. Судя по трейсам использовался именно дебажный вариант
Блин, а ведь верно. Я даже не подумал) Туплю.
Сделал релизный тест, и мои изначальные ожидания оправдались с лихвой.
Вот для релиза:

Код AS3:
public function MathCrap() {
 
	var tf:TextField = new TextField();
	tf.width = 800;
	tf.height = 600;
	addChild(tf);
 
	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);
	}
	tf.appendText("Math.abs() " + (getTimer() - time) + "\n"); 
	time = getTimer();
	for (i = 0; i < 10000000; i++) {
		result = abs(number);
	}
	tf.appendText("Inline abs " + (getTimer() - time) + "\n");
	tf.appendText("CEIL >>>");
	number = 1.5;
	time = getTimer();
	for (i = 0; i < 10000000; i++) {
		result = Math.ceil(number);
	}
	tf.appendText("Math.ceil() " + (getTimer() - time) + "\n");
	time = getTimer();
	for (i = 0; i < 10000000; i++) {
		result = ceil(number);
	}
	tf.appendText("Inline ceil " + (getTimer() - time) + "\n");
 
}
[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() 528
Inline abs 85
CEIL >>>Math.ceil() 549
Inline ceil 55
То то же

Никогда не думал, что придется настолько заморачиваться с оптимизацией приложений)
__________________
Ко мне можно и нужно обращаться на ты)