Насколько дорогой вызовы функции JS (по сравнению с выделением памяти для переменной)?

Вот еще один метод для итерации объекта.

   var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};


Object.keys(p).forEach(key => { console.log(key, p[key]) })

12
задан Gilles 'SO- stop being evil' 23 October 2012 в 21:07
поделиться

8 ответов

Определенно. Память потребовала для хранения, который только был бы указателем на Объект DOM, и это значительно менее болезненно, чем выполнение DOM ищет каждый раз, когда необходимо использовать что-то!

Код Idealish:

var scale_select = document.getElementsByName('scale_select');
for (var i = 0; i < scale_select.length; i++)
    scale_select[i].onclick = vSetScale;
17
ответ дан 2 December 2019 в 05:29
поделиться

Умная реализация DOM сделала бы свое собственное кэширование, делая недействительным кэш, когда что-то изменяется. Но не весь DOMS сегодня может рассчитываться, чтобы быть этим умным (кашель кашель IE), таким образом, лучше, если Вы делаете это сами.

3
ответ дан 2 December 2019 в 05:29
поделиться

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

Так объявление переменной в цикле, который содержит значение scale_select.length, ускорило бы весь цикл некоторые.

var scale_select = document.getElementsByName('scale_select');
for (var i = 0, al=scale_select.length; i < al; i++)
    scale_select[i].onclick = vSetScale;
4
ответ дан 2 December 2019 в 05:29
поделиться

В принципе код был бы быстрее, если мы помещаем результат getElementsByName в переменную перед циклом и затем используем переменную после этого?

да.

1
ответ дан 2 December 2019 в 05:29
поделиться

Используйте переменные. Они не являются очень дорогими в JavaScript, и вызовы функции определенно медленнее. Если Вы циклично выполняетесь по крайней мере 5 раз по document.getElementById (), используют переменную. Идея здесь не является только вызовом функции, является медленным, но и эта определенная функция является очень медленной, поскольку это пытается определить местоположение элемента с данным идентификатором в DOM.

1
ответ дан 2 December 2019 в 05:29
поделиться

Oli

Кэширование свойства длины элементов, выбранных в переменной, является также хорошей идеей:

var scaleSelect = document.getElementsByName('scale_select');
var scaleSelectLength = scaleSelect.length;

for (var i = 0; i < scaleSelectLength; i += 1)
{
    // scaleSelect[i]
}
1
ответ дан 2 December 2019 в 05:29
поделиться

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

С другой стороны, если значение сохраняется в переменной, чем оно уже имеет значение.

0
ответ дан 2 December 2019 в 05:29
поделиться

Нет никакого смысла хранящего scaleSelect.length в отдельной переменной; это на самом деле уже находится в одном - scaleSelect.length, просто атрибут массива scaleSelect, и как таковой, это столь же быстро к доступу как любая другая статическая переменная.

1
ответ дан 2 December 2019 в 05:29
поделиться
Другие вопросы по тегам:

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