Javascript: Эффективен ли метод длины?

я выполняю кодирование javascript, и мне интересно, является ли метод длины "предварительно вычисленным" или запоминается JS двигатель.

Итак, вопрос в следующем:

Если я очень часто проверяю длину массива и предполагаю, что я не изменяю его (делая его неизменяемым через замыкание), должен ли я предварительно вычислить метод длины и сохранить в какой-то переменной?

Спасибо!

26
задан Rocket Hazmat 6 March 2012 в 21:34
поделиться

2 ответа

Вероятно, есть небольшое увеличение скорости, достигаемое кэшированием длины в локальной переменной из-за скорости поиска атрибутов. Это может или не может быть незначительным, в зависимости от того, как движок JS JIT код.

См. http://jsperf.com/for-loop-caching для элементарного теста JSperf.

2
ответ дан 28 November 2019 в 07:06
поделиться

Как всегда, ответ «это зависит».

Давайте протестируем собственные массивы с массивом из миллиона элементов:

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 мс. Другими словами: остерегайтесь преждевременной оптимизации .

26
ответ дан 28 November 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: