Производительность логической операции

Есть блог товарища Jackson. Кто читает этот блог тот знает что он пишет множество статей на тему оптимизации. Так вот он развеивает множество мифов, которые сложились вокруг AS3 в плане производительности конкретных методик написания кода.

Например, считается что если объект создать вот таким образом
[cc lang="actionscript3"]var obj:Object = {}[/cc]
то это будет быстрее чем
[cc lang="actionscript3"]var obj:Object = new Object()[/cc]
так в действительности все как раз наоборот. Создание объекта через new Object() почти в 2 раза быстрее чем через {}.

А вот в случае если создается массив, то метод
[cc lang="actionscript3"]var arr:Array = [] [/cc]
будет почти в 2.5 раза быстрее нежели
[cc lang="actionscript3"]var arr:Array = new Array() [/cc]

Советую почитывать этого товарища тем кому не все равно на производительность кода, особенно это касается тех кто пишет игры, игровые движки, физ. движки и т.д.
Некоторые из постов я буду писать тут, это будет не перевод, а краткие результаты по данному тесту к какому то его топику, с соответствующей ссылкой на полный оригинал для тех кто захочет более глубже вникнуть в суть. Перед тем как публиковать я сам пишу тесты по данной теме и сравниваю результаты (с чем черт не шутит :) ), потому все кто захочет смогут скачать код и готовый скомпилированный тест.

Ну это так, вступление. А сейчас о последнем мифе, который развеял Jackson.

Всегда считалось (по крайней мере сколько я ни читал и не слушал) что быстрее исполняется один IF оператор с множеством условий нежели множество IF операторов с одни условием.
Например, ниже есть два кода идентичны по логике.
[cc lang="actionscript3"]
var a:int = 1;
var b:int = 2;
var c:int = 3;
var d:int = 4;
var e:int = 5;

if (a == 1 && b == 2 && c == 3 && d == 4 && e == 5)
{

}
[/cc]

[cc lang="actionscript3"]
var a:int = 1;
var b:int = 2;
var c:int = 3;
var d:int = 4;
var e:int = 5;

if (a == 1)
{
if (b == 2)
{
if (c == 3)
{
if (d == 4)
{
if (e == 5)
{

}
}
}
}
}
[/cc]

Так вот считается, что первый код должен исполнятся быстрее чем второй. Но это абсолютно не так, а как раз наоборот.
В своей статье Jackson описывает более детально с приведением байт кода этих конструкций.
Если кратко то результат таков:
вторая конструкция исполняется в 2 раза быстрее (!!!) нежели первая.
Вот такие пироги.

Скачать тест

Оригинал статьи

Поделиться в соц. сетях

Опубликовать в LiveJournal
Опубликовать в Google Plus