![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 18.03.08]
Регистрация: Nov 2006
Сообщений: 223
|
Вот на этих страничках можно почитать про исследование быстродействия различных арифметических операций.
http://www.rockonflash.com/blog/?p=63 http://osflash.org/as3_speed_optimizations Было определено, что методы класса Math работают довольно медленно. На самом деле дело не в том, что методы какие-то тормознутые, а в том, что вообще происходит вызов метода. Например, вместо Math.abs(x) лучше использовать x<0?-x:x Но если кто-то решит создать класс с быстрой математикой, например такой: package {
public class FastMath {
public static function abs(x:Number):Number {
return x<0?-x:x;
}
}
}
А всё дело в том, что сам вызов метода и возврат назад кушают больше, чем содержимое метода. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Цитата:
__________________
http://realaxy.com |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 467
|
Вместо Math.floor можно спользовать: value >> 0;
![]() Можно собрать список вот таких фич... ![]() Post Update: Протестил: var time:Number = 0;
runFloorTest();
runFloorUintTest();
runFloorShiftTest();
function runFloorTest():void
{
time = getTimer();
for(var i:uint=0;i<10000000;i++)
{
var n:Number = 1.5;
var test:Number = Math.floor(n);
}
trace("FloorTest: ", (getTimer()-time));
}
function runFloorUintTest():void
{
time = getTimer();
for(var i:uint=0;i<10000000;i++)
{
var n:Number = 1.5;
var test:Number = uint(n);
}
trace("FloorUintTest: ", (getTimer()-time));
}
function runFloorShiftTest():void
{
time = getTimer();
for(var i:uint=0;i<10000000;i++)
{
var n:Number = 1.5;
var test:Number = n >> 0;
}
trace("FloorShiftTest: ", (getTimer()-time));
}
FloorTest: 2046 FloorUintTest: 392 FloorShiftTest: 280 Последний раз редактировалось 2morrowMan; 08.03.2008 в 23:16. |
|
|||||
|
[+1 18.03.08]
Регистрация: Nov 2006
Сообщений: 223
|
Цитата:
Во-вторых, если в цикле идёт голая математика, а сам цикл достаточно длинный, то даже такие мелочи начинают иметь значение. В-третьих, иногда методы всё же вызываются, хотя мы этого и не предполагали. Вот, например, в чём разница между и где n имеет тип Number? Разница в том, что в первом случае происходит вызов метода. Правда, что удивительно, на быстродействии это никак не сказывается. Так что в AVM2 всё очень даже неоднозначно. Последний раз редактировалось WindWalker; 09.03.2008 в 04:17. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Цитата:
Знание и правильное применение хорошей практики, в частности, шаблонов проектирования. Как итог - понятный и логичный код без ошибок и лишних операций. Оптимизация кода - только как отдельный, завершающий и четко направленный на узкие места процесс, при наличии тестов. Прекращение оптимизации по достижении достаточной производительности. Примерно так. PS: На моей практике бывали случаи, когда приходилось брать чужой усосаный хаками для производительности код, переименовывать всё и вся, убирать хаки и т.п., после этого разбираться с логикой и делать тесты. Рекордный случай - удаление порядка 17 тысяч в кадр(!) лишних вызовов методов. Ни в одном из случаев процесс оптимизации не доходил до того, чтобы заменять циклы for на while или заменять типы данных или вызовы математических методов. Процесс оптимизации прекращался задолго до этого, на уровне изменения логики приложения. PPS: И да, не юзайте чужие хакерские приемы не проверив. И в этом топике в коде есть ошибки. Четко отдавайте себе отчет, готовы ли вы взамен на выигрыш в 0.0003 миллисекунды жертвовать читабельностью кода и риском внесения ошибки.
__________________
http://realaxy.com Последний раз редактировалось Iv; 09.03.2008 в 07:37. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
WindWalker, согласен. Но тогда, наверное, не стоит подменять понятия и говорить именно о тонкостях внутренней механики, а не об оптимизации.
__________________
http://realaxy.com |
|
|||||
|
strange mood
|
Цитата:
![]() Просто сейчас всё идёт в сторону разрастания итак громоздкого кода ради его универсальности. Т.е. в итоге жертвуем производительностью в пользу удобства написания (прочтения, понимания, отладки, редактирования) кода. Эта позиция понятна: железо постоянно совершенствуется, поэтому теперь можно себе такое позволить. А почему бы не продолжать писать продуманный код, получая выигрыш в скорости при совершенствовании железа? Фреймворки и паттерны это удобно. Это и хорошо, ведь всё-таки их далеко не дураки придумывали. Тем не менее они все являются стандартизованными для общего случая. А общее решение, как известно, проигрывает решению, найденному для данной конкретной ситуации. Конечно для этого требуется более высокая квалификация кодера, но на то он и программер чтобы думать. Недостаточно просто выучить язык, нужно уметь правильно всё придумать и организовать. Сейчас программить становится всё легче и легче, соответственно растёт число быдлокодеров, которые пишут тормозной код, потому что его легче всего написать. Можно много ещё чего написать, вернуться к тому что я ни в коем случае не говорю что использовать паттерны это плохо итд, но я пожалуй пока остановлюсь. Ибо нахожусь немного в неадеквате ![]() С удовольствием выслушаю всё, что мне на это ответят
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
GAIKER, я не вижу никакого противоречия.
Вот ты написал приложение, оно устраивает и тебя и заказчика по производительности. Будешь ли ты его оптимизировать? И, даже если будешь, то до какой степени? Нужна ли везде максимальная производительность? Как определить, что производительность уже максимальна и достигнут предел? Моя практика показывает, что вообще довольно редко доходим до этапа оптимизации кода. Но в том-то и дело, что оптимизация - отдельный этап и часто обратный универсализации. В этом ряду совершенно особняком стоят публичные библиотеки кода, поскольку заведомо неизвестно где и на какой нагрузке их код будет работать. Но и здесь имеется предел, дальше которого не стоит оптимизировать код только потому, что выигрыш ничтожен по сравнению, например, с накладными расходами на вызов метода.
__________________
http://realaxy.com Последний раз редактировалось Iv; 09.03.2008 в 20:40. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|