четверг, сентября 20, 2007

Оптимизация AS3

Статья по оптимизации AS3.
Основные идеи:
  • не перегружать условия и операторы (не понял)
  • не использовать объекты, если заранее известно, с какие свойства будут задействованы в итоге.
  • При чтении массива, сразу приводить тип экземпляров его элементов.
  • По возможности использовать Integer.
  • Использовать битовые операторы.
  • Использовать типизированные массивы с фиксированной длинной.
Кроме того:
  • "a += b" быстрее чем "a = a + b"
  • "a++" быстрее чем "a = a + 1"
  • вышесказанное не действительно для оператора вычитания
  • "value*.5" быстрее чем "value/2"
  • деление на 2: "10 >> 1"
  • умножение на 2: "10 <<>
  • однако, битовые операции не оптимальны для Number
  • Округление:
    var n:Number = 1.5;
    test:Number = Math.floor(n); - очень медленно (1733)
    var test:uint = uint(n); - быстро (176)
    var test:int = int(n); - быстро (157)
    var test:Number = n >> 0; - быстро (178)
    var test:Number = Math.ceil(n); - медленно
    var test:uint = n == uint(n) ? n : uint(n)+1; - медленно (650)
    var test:int = n == int(n) ? n : int(n)+1; - быстро (384)
  • Абсолютное значение, Math.abs:
    var n:Number = -1.5;
    n = Math.abs (n); - очень медленно (1539.92)
    n = n < n =" n" class="blsp-spelling-error" id="SPELLING_ERROR_21">if (n < n =" -n;">

Итак (с учетом Number):

  • Деление на 2: "n * 0.5"
  • Умножение на 2: "n + n"
  • Math.floor: "n >> 0"
  • Абсолютное значение: "if (n < n =" -n">



2 комментария:

Juz комментирует...

А откуда вся эта информация?

Например вот это

"a += b" быстрее чем "a = a + b";

Неужели не производится никакой оптимизации кода??

Racer комментирует...

Это оч старый пост. Очевидно, что свежие компиляторы и плееры производят оптимизацию.
Информацию об этом, видимо, где-то можно найти.