Оптимизация кода
По материалу http://www.realcoding.net/article/view/6905
1 Использование циклов for и while
Рекомендуется для циклов с большим количеством итераций(повторений) использовать цикл while так как он в 3 раза быстрее обрабатывает информацию.
Также для оптимизации рекомендуется использовать вместо классического
| Тесты/Браузеры | 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 Функции, объекты, переменные
Создание объекта следует писать через прототип, а не обычный конструктор так как это также в разы ускоряет работу.
Вызов свойств объекта следует вызывать напрямую:
При создании свойств объектов следует не забывать указывать параметр 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:
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 |