Почему for (var i = 100; i--;) {} намного медленнее (70%), чем for (var i = 100; i -> 0;) {} в Firefox? - PullRequest
4 голосов
/ 10 июля 2011

Вот тест: http://jsperf.com/forloopspeed

Как видите, разница в Firefox огромна, присутствует в значительно меньшей степени в Safari и отсутствует в Chrome и Opera.

Аналогичное происходит и с циклами while: http://jsperf.com/whileloopspeed

Ответы [ 3 ]

2 голосов
/ 10 июля 2011

Полагаю, что внутренний ToBoolean(), который выполняется с результатом выражения, немного медленнее, когда ему присваивается number, по сравнению с boolean.

.

В этом тесте я получаю разницу в производительности при преобразовании в логическое значение из логического значения в сравнении с числом, используя !!.

2 голосов
/ 10 июля 2011

Это похоже на проблему, специфичную для Jaegermonkey.Если я запускаю тест под Tracemonkey, эффект исчезает.

Filed https://bugzilla.mozilla.org/show_bug.cgi?id=670493

2 голосов
/ 10 июля 2011

Я предполагаю, что проверка того, является ли i (Число) ложным значением, требует больших вычислительных затрат, чем проверка true / false (результат сравнения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...