TL; DR: браузер анализирует файл HTML, создает модель DOM и сохраняет ее в памяти.

Мое сообщение в блоге на этой неделе посвящено объектной модели документа (DOM). Если вы не знакомы с этой концепцией, у Mozilla есть отличное объяснение здесь.

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

В кроличью нору - window и document

Недавно я смотрел JavaScript: понимание странных частей Тони Алисии. Если вы перейдете к 29:00, он создаст и откроет в браузере пустой файл app.js. Файл app.js полностью пуст.

Открыв браузер, Тони запускает консоль разработчика Chrome и вводит слово window. Каким-то образом консоль вернула свойство window, содержащее сотни пар ключ / значение. Ввод document в консоли для пустого сайта аналогично дает какое-то предопределенное свойство.

Согласно MDN, «интерфейс window представляет собой окно, содержащее документ DOM; свойство document указывает на документ DOM, загруженный в это окно. '

Откуда загружено?

Как MDN объясняет выше, браузер «загружает» document в окно. Но где же DOM? Как document знает, где искать?

После некоторого поиска в Google я натолкнулся на этот ответ от React Kung Fu:

«Итак, хотя HTML - это текст, модель DOM - это представление этого текста в памяти».

Другими словами, браузер хранит DOM в оперативной памяти. Мой следующий вопрос был как?

Механизм рендеринга - как HTML преобразуется в модель DOM

Вот отрывок из сообщения на носителе, в котором рассказывается, как DOM загружается в память:

Механизм визуализации браузера получает содержимое запрошенного документа от сетевого уровня. Первым шагом механизма визуализации является анализ HTML-документа и преобразование проанализированных элементов в фактические узлы DOM в дереве DOM.

Этот процесс можно далее разбить на преобразование, разметку, лексирование и построение модели DOM. См. Эту статью от Google Web для получения дополнительной информации.

Последний эксперимент со средами выполнения JavaScript

Механизм JavaScript Google Chrome называется V8. В V8 также используется среда выполнения JavaScript под названием Node.js.

В отличие от Chrome, Node.js не запускается в браузере. Для меня не имело смысла иметь DOM без браузера, но я хотел подтвердить. Я запустил Node.js, введя node в свой терминал, а затем ввел document. Как я и ожидал, терминал вернул ReferenceError: document is not defined.

Надеюсь, вам понравилось читать этот пост!