Циклы действительно быстрее наоборот? - PullRequest
252 голосов
/ 27 августа 2009

Я слышал это довольно много раз. Действительно ли циклы JavaScript действительно быстрее при обратном отсчете? Если так, то почему? Я видел несколько примеров набора тестов, показывающих, что обратные циклы быстрее, но я не могу найти объяснения, почему!

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

т.е.

for (var i = count - 1; i >= 0; i--)
{
  // count is only evaluated once and then the comparison is always on 0.
}

Ответы [ 34 ]

1 голос
/ 30 октября 2012

Это только предположение, но, возможно, это потому, что процессору проще сравнивать что-то с 0 (i> = 0), а не с другим значением (i <Things.length).

0 голосов
/ 23 января 2013

Самый быстрый способ для режима декремента:

var iteration = 10000000;
    while(iteration > 0){
        iteration--;
    }

БЫСТРЕЕ, ЧЕМ:

var iteration = 10000000;
    while(iteration--);

Тест микрооптимизации Javascript

0 голосов
/ 27 августа 2009

Использование префиксного оператора приращения несколько быстрее. С постфиксом компилятор должен сохранить предыдущее значение как результат выражения.

for (var i = 0; i < n; ++i) {
  do_stuff();
}

Умный интерпретатор или компилятор увидит, что результат i ++ не используется, и не сохранит результат выражения, но это делают не все движки js.

0 голосов
/ 16 декабря 2011

Я хочу внести в эту тему самый быстрый цикл в JavaScript, который является кросс-браузерным! Этот цикл дает улучшение более чем на 500% по сравнению с обратным циклом while.

Мой блог: Самый быстрый цикл в JavaScript

...