Иллюстрированный самоучитель по созданию Flash-игр

Выполнение и оптимизация

Оптимизация в ActionScript

Исходный файл: Benchmark3.fla.

Тесты с помощью установки контрольных точек позволяют также выяснить, влияет ли на скорость ролика выбор альтернативных алгоритмов. Техника такая же: измеряем время на выполнение задачи и сравниваем его с временем, затраченным на выполнение задания альтернативным способом. Допустим, вы заметили, что в коде используется следующее сравнение:

if (myVariable == true) {

Понятно, что то же самое можно записать проще:

if (myVariable) {

Иногда первую строчку легче понять, но почему второй вариант увеличивает скорость работы программы? Вы могли использовать сотни или тысячи подобных сравнений внутри циклов и т.д.

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

Следующий фрагмент построен для сравнения типа "истина/ложь". Сначала создается массив из 5000 элементов вида false и true. Этот процесс при подсчете времени учитываться не будет. Время засекается после того, как массив был создан. Измеряем время на подсчет количества элементов, равных true. Для этого используется оператор = =. В конце сценарий выводит время, которое потребовалось для 5000 сравнений.

function benchMacrk1() {
    // Создаем новый массив.
    testArray = new Array;
    // Заполняем массив значениями true или false,
    temp = false;
    for (I = 0; I < 5000; I++) {
        testArray.push(temp);
        if (temp == false) {
            temp = true;
        }
        else if (temp == true) {
            temp = false;
        }
    }
    // Определяем время начала проверки.
    startTime = getTimer();
    // Подсчитываем, сколько значений true находится в массиве.
    count = 0;
    for (I = 0; I < testArray.length; I++) {
        if (testArray[I] == ture) {
            count++;
        }
    }
    // Определяем время, потребовавшееся для проведения проверки.
    totaltime = getTimer() - startTime;
    // Отображаем результаты.
    trace("Benchmark Test: using ==") trace("Total Time: " + totaltime + "ms");
}

Сам по себе результат ничего не значит. Однако вы также создадите функцию benchmark2, в которой строчка if (testArray [I] == true) { будет заменена на if (testArray [I]) {. Это единственная разница между функциями. Следовательно, если скорость выполнения сценария изменится, это произойдет вследствие замены строчек.

В результате оказалось, что второй вариант быстрее. На моем компьютере функции benchmark1 понадобилось 978 миллисекунд, а benchmark2 – 958. Использование оператора == замедляет процесс сравнения истинных и ложных значений. Посмотреть, как работает приведенный выше код, в файл Benchmark3.fla.

Такие тесты с помощью установки контрольных точек проводят все профессиональные программисты независимо от того, на каком языке они пишут. Если вы часто пользуетесь языком ActionScript, будет полезно определить, какие методы работают быстрее. После проведения подобных тестов можно обобщить полученную информацию, которая позволит оптимизировать ваши Flash-игры.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.