Я думал об этом сегодня, и я понял, что у меня нет четкой картины.
Вот некоторые утверждения, которые я считаю правдой (пожалуйста, поправьте меня, если я ошибаюсь):
- DOM представляет собой набор интерфейсов, определенный W3C.
- при анализе исходного кода HTML браузер создает дерево DOM с узлами, которые реализуют интерфейсы DOM.
- Спецификация ECMAScript не имеет ссылок на объекты хоста браузера (DOM, BOM, API HTML5 и т.д.).
- то, как выполняется DOM, зависит от внутренних элементов браузера и, вероятно, отличается от большинства из них.
- современные интерпретаторы JS используют JIT для улучшения производительности кода и перевода его на байт-код
Мне интересно, что происходит за кулисами, когда я звоню document.getElementById('foo')
. Вызывает ли вызов делегировать собственный код браузера интерпретатором или имеет ли в браузере JS-реализацию всех объектов хоста? Знаете ли вы о какой-либо оптимизации, которую они делают в отношении этого?
Я читал этот обзор внутренних элементов браузера, но ничего об этом не упоминал. Я посмотрю источник Chrome и FF, когда у меня будет время, но я сначала подумал о том, чтобы спросить здесь.:)