я выполняю кодирование javascript, и мне интересно, является ли метод длины "предварительно вычисленным" или запоминается JS двигатель.
Итак, вопрос в следующем:
Если я очень часто проверяю длину массива и предполагаю, что я не изменяю его (делая его неизменяемым через замыкание), должен ли я предварительно вычислить метод длины и сохранить в какой-то переменной?
Спасибо!
Вероятно, есть небольшое увеличение скорости, достигаемое кэшированием длины в локальной переменной из-за скорости поиска атрибутов. Это может или не может быть незначительным, в зависимости от того, как движок JS JIT код.
См. http://jsperf.com/for-loop-caching для элементарного теста JSperf.
Как всегда, ответ «это зависит».
Давайте протестируем собственные массивы с массивом из миллиона элементов:
for (var i = 0; i < arr.length; i++);
var len=arr.length;
for (var i = 0; i < len; i++);
http://josh3736.net/images/arrlen.png
Chrome и Firefox оптимизируют средство доступа к свойствам так же эффективно, как копирование длины в локальную переменную. IE и Opera этого не делают, и на 50% медленнее.
Однако , имейте в виду, что «ops / second» результатов теста означает количество полных итераций в массиве из одного миллиона элементов в секунду.
Чтобы представить это в перспективе, даже в IE8 (худший результат в этом наборе) - который набрал 0,44 и 3,9 на доступ к свойству и локальную переменную (соответственно) - штраф за каждую итерацию был скудным 2 мкс . Итерация более тысячи элементов, использование array.length
обойдется вам всего в 2 мс. Другими словами: остерегайтесь преждевременной оптимизации .