Итак, это мой вопрос: Почему вызов метода быстрее, чем извлечение из памяти?
Замечание, когда атрибут id указан в элементе DOM, пользовательские агенты автоматически присоединяют ссылку на элемент в своей глобальной области.
Так как пользовательские агенты уже ссылаются на все элементы, которые имеют свой атрибут id, зачем мне нужно использовать document.getElementById("")?
В приложении я бы:
//Retrieving the value, I could possibly write this two way.
<script>
var fromGlobalScope = myElement.value;
var documentGetById = document.getElementById("myElement").value;
</script>
<input id="myElement" value="someValue" />
Выполняя некоторые исследования, он поддерживается всеми главными браузерами, но их может не поддерживать браузер, который не будет работать.
Однако я мог просто написать:
<script>
//See if the element is on the global scope.
var fromGlobalScope = myElement ||document.getElementById("myElement");
</script>
Я считаю, что шаблон правильно, я могу автоматически ссылаться на все элементы, имеющие атрибут id. Мне не нужно вызывать document.getElementById();
Используя свойство-резидент, и мне не пришлось бы ходить по DOM, подумал бы, что будет хорошая производительность.
Я создал jsPerf, чтобы увидеть преимущество: введите ссылку здесь
Мое удивление заключалось в использовании document.getElementById() было намного быстрее?
Итак, это мой вопрос: Почему вызов метода быстрее, чем извлечение из памяти?
Используя document.getElementById, я бы назвал метод, который может или не может проходить DOM. По крайней мере, я буду вызывать адрес для значения.
Свойство в глобальной области действия, которое должно быть быстро доступно, поскольку оно помещено в некоторую ячейку памяти.
У меня есть результаты jsPerf ниже:
Я создал еще один jsPerf с другой мыслью: явно задает свойство объекта окна
Тем не менее, я все еще верю, что научился тому, почему может помочь с механиками, которые играют, что может привести к чему-то полезному.