Code

Оптимизация кода

По материалу http://www.realcoding.net/article/view/6905

1 Использование циклов for и while

Рекомендуется для циклов с большим количеством итераций(повторений) использовать цикл while так как он в 3 раза быстрее обрабатывает информацию.

Также для оптимизации рекомендуется использовать вместо классического

for (var a=0;a<1000;a++)
его аналог - инвертированный for
for(var i=1000; i>=0; i--)

Тесты/Браузеры FF3 Opera Chrome IE7 IE8b2
Циклы
Классический цикл 71 100 16 238 218
Инвертированный цикл 34 34 7 70 118
while-цикл 30 33 7 70 118

2 Работа с массивами и объектами

Если вам необходимо из массива выбрать несколько значений по заданному условию, то необходимо пользоваться методом array.slice() вместо обычного перебора циклом.

Перебор же объектов следует вести по методу:
1. Перебор объекта (1M) через инвертированный цикл.

Для заполнения массива можно использовать 2 способа:
1. заполнение массива через array.length
2. заполнение массива в прямом порядке через значение шага цикла (классический цикл)

Тесты/Браузеры FF3 Opera Chrome IE7 IE8b2
Перебор массивов и объектов
Получение значений большого массива (1M) по индексу (полный перебор в обратном порядке) 430 170 18 790 1020
Получение значения маленького массива (100) по индексу 124 146 18 428 515
For-in цикл по объекту (1M) 2020 2160 385 39400 35400
Перебор объекта (1M) через инвертированный цикл 390 170 18 745 746
Заполнение массивов и объектов
Заполнение (1M) массива через array.length 190 485 82 2640 865
Заполнение (1M) массива в прямом порядке через значение шага цикла (классический цикл) 200 432 75 2500 760
Заполнение (1M) массива в обратном порядке через значение шага цикла (инвертированный цикл) 1180 310 124 2270 2260
Заполнение (1M) массива через push() 176 1120 98 4450 1186
Заполнение объекта (1M) в прямом порядке через значение шага цикла (классический цикл) 1080 368 74 2400 2205

1 Функции, объекты, переменные

Создание объекта следует писать через прототип, а не обычный конструктор так как это также в разы ускоряет работу.

Вызов свойств объекта следует вызывать напрямую:

this.prop=value;

При создании свойств объектов следует не забывать указывать параметр var.

Тесты/Браузеры FF3 Opera Chrome IE7 IE8b2
Вызов пустой функции с передачей ей текущего значения цикла 129 270 17 3100 860
Создание объекта (создание 2-х методов и одного свойства через конструктор) 2460 1900 593 18600 11700
Создание объекта (создание 2-х методов из прототипа и одного свойства через конструктор) 1260 636 64 7830 4210
Получение свойства объекта (собственное свойство) 84 142 16 406 412
Получение свойства объекта (свойство прототипа) 90 147 29 474 474
Получение свойства объекта (метод-геттер приватного var свойства) 260 354 33 3430 1160
Вызов инкрементного метода объекта (увеличивает собственное свойство через this) 326 460 60 3810 1520
Вызов инкрементного метода объекта (увеличивает собственное свойство через явное указание объекта) 356 520 65 3985 1633
Вызов инкрементного метода объекта (увеличивает приватное var свойство) 412 370 38 3530 1320

4. Работа с IF и SWITCH

Рекомендуется использовать при задании условий switch:

switch(a) {
case 0: b=6+2; break;
case 1: b=8*3; break;
}
Тесты/Браузеры FF3 Opera Chrome IE7 IE8b2
Выбор ветви из 8 возможных через if 800 500 60 1500 1460
Выбор ветви из 8 возможных через switch 315 334 54 868 1039
Выбор ветви из 8 возможных через хэш функций 620 400 86 4520 1820