Показать сообщение отдельно
  #1 (permalink)  
Старый 17.10.2012, 16:35
Интересующийся
Отправить личное сообщение для Arconas Посмотреть профиль Найти все сообщения от Arconas
 
Регистрация: 21.05.2010
Сообщений: 11

Быстродействие циклов. Вопросы.
Добрый день.
Не так давно наткнулся на http://www.jstoolbox.com/2008/03/25/...zaciya-ciklov/, посвященную оптимизации циклов в JS. Стало интересно проверить на деле какой же из циклов реально быстрее.

В результате был написан такой код http://pastebin.com/9tfJVzbE, в котором Я использовал разную запись циклов (полная против краткой) и разный обход массива (i++ или i--). В первом варианте скрипта (http://pastebin.com/7iW79Za7) массив задавался в каждой функции. Сейчас Я его вынес в глобальную область и дал обычный вывод данных на страницу вместо консоли.

И вот какие результаты Я получил:
Полная запись с len - это for(var i= 0, len = tArray.length; i<len; i++)
FF 16
Код:
for полная запись. Перебор по возрастающей 36 ms
for полная запись с len. Перебор по возрастающей 32 ms
for полная запись. Перебор по убывающей 39 ms
for краткая запись. Перебор по убывающей 38 ms
while. Перебор по возрастающей 46 ms
while. Перебор по убывающей 42 ms
do. Перебор по убывающей 43 ms


Chrome 22
Код:
for полная запись. Перебор по возрастающей 31 ms
for полная запись с len. Перебор по возрастающей 33 ms 
for полная запись. Перебор по убывающей 34 ms
for краткая запись. Перебор по убывающей 35 ms
while. Перебор по возрастающей 45 ms
while. Перебор по убывающей 41 ms
do. Перебор по убывающей 40 ms
IE 9
Код:
for полная запись. Перебор по возрастающей 113 ms
for полная запись с len. Перебор по возрастающей 83 ms 
for полная запись. Перебор по убывающей 76 ms
for краткая запись. Перебор по убывающей 73 ms
while. Перебор по возрастающей 87 ms
while. Перебор по убывающей 66 ms
do. Перебор по убывающей 79 ms
И вот тут возникли вопросы:
  1. Почему краткая запись, которая вроде бы должна быть быстрой, не такая быстрая? Или в статье всё врут? Она довольно старая.
  2. Не закралась ли в код ошибка и правильно ли Я понял краткую запись?
  3. Почему запись с вычислением длинны массива в условии срабатывает быстрее обычной?
И, что самое интересное, в первом варианте, где массив задавался в каждой функции перебор i-- проходил быстрее, чем по i++.
В JS новичок =(

Последний раз редактировалось Arconas, 17.10.2012 в 16:37.
Ответить с цитированием