HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Чтобы работать с JavaScript в браузерах, очень важно понимать, как они работают, хотя бы в общих чертах. Давайте возьмем для примера страницу и рассмотрим основные шаги, которые выполняет браузер для ее отображения:</p>
1 <p>Чтобы работать с JavaScript в браузерах, очень важно понимать, как они работают, хотя бы в общих чертах. Давайте возьмем для примера страницу и рассмотрим основные шаги, которые выполняет браузер для ее отображения:</p>
2 <p>В общих чертах процесс отображения страницы выглядит так:</p>
2 <p>В общих чертах процесс отображения страницы выглядит так:</p>
3 <ol><li><p>Браузер узнает адрес страницы с помощью<a>DNS</a>, а затем делает запрос на сервер:</p>
3 <ol><li><p>Браузер узнает адрес страницы с помощью<a>DNS</a>, а затем делает запрос на сервер:</p>
4 <p>Сервер присылает в ответ HTML-код.</p>
4 <p>Сервер присылает в ответ HTML-код.</p>
5 </li>
5 </li>
6 <li><p>Браузер получает HTML-код, анализирует его и формирует внутреннюю структуру, называемую<strong>DOM-дерево</strong>.</p>
6 <li><p>Браузер получает HTML-код, анализирует его и формирует внутреннюю структуру, называемую<strong>DOM-дерево</strong>.</p>
7 </li>
7 </li>
8 <li><p>После этого браузер использует это дерево для физического рендеринга страницы, которую мы рассматриваем:</p>
8 <li><p>После этого браузер использует это дерево для физического рендеринга страницы, которую мы рассматриваем:</p>
9 </li>
9 </li>
10 </ol><p>Что такое дерево DOM? Зачем оно нам нужно для создания страницы, если у нас есть HTML? Дело в том, что HTML - это просто текст. Использовать его напрямую крайне неудобно. Фактически, это невозможно.</p>
10 </ol><p>Что такое дерево DOM? Зачем оно нам нужно для создания страницы, если у нас есть HTML? Дело в том, что HTML - это просто текст. Использовать его напрямую крайне неудобно. Фактически, это невозможно.</p>
11 <p>Гораздо проще создать на его основе объект, который будет соответствовать структуре самого HTML, а затем использовать его для генерации страницы. Таким объектом и является<strong>DOM-дерево</strong>.</p>
11 <p>Гораздо проще создать на его основе объект, который будет соответствовать структуре самого HTML, а затем использовать его для генерации страницы. Таким объектом и является<strong>DOM-дерево</strong>.</p>
12 <p>Слово<strong>дерево</strong>используется здесь неспроста. HTML-файл имеет древовидную структуру. Он состоит из тегов, вложенных в другие теги, которые вложены в другие теги, и так далее.</p>
12 <p>Слово<strong>дерево</strong>используется здесь неспроста. HTML-файл имеет древовидную структуру. Он состоит из тегов, вложенных в другие теги, которые вложены в другие теги, и так далее.</p>
13 <p>Поэтому и получившийся объект имеет такую же, древовидную структуру:</p>
13 <p>Поэтому и получившийся объект имеет такую же, древовидную структуру:</p>
14 <p>Что-то подобное происходит с исходным кодом программ JavaScript. Для интерпретатора текст неудобен. Поэтому код внутри JavaScript сначала превращается в AST (Абстрактное Синтаксическое Дерево), которое уже затем используется для запуска.</p>
14 <p>Что-то подобное происходит с исходным кодом программ JavaScript. Для интерпретатора текст неудобен. Поэтому код внутри JavaScript сначала превращается в AST (Абстрактное Синтаксическое Дерево), которое уже затем используется для запуска.</p>
15 <p>Браузер формирует DOM-дерево где-то внутри себя, но при этом он предоставляет механизм для создания DOM-дерева прямо из JavaScript:</p>
15 <p>Браузер формирует DOM-дерево где-то внутри себя, но при этом он предоставляет механизм для создания DOM-дерева прямо из JavaScript:</p>
16 <p>Полученный выше объект имеет структуру, которая будет одинаковой во всех браузерах и других программах, работающих с HTML. Именно поэтому он содержит приставку DOM.</p>
16 <p>Полученный выше объект имеет структуру, которая будет одинаковой во всех браузерах и других программах, работающих с HTML. Именно поэтому он содержит приставку DOM.</p>
17 <p>Объектная модель документа (Document Object Model) - это независимый от платформы и языка формат, который позволяет программам и скриптам получать доступ к содержимому HTML-документов, а также изменять их содержимое, структуру и дизайн.</p>
17 <p>Объектная модель документа (Document Object Model) - это независимый от платформы и языка формат, который позволяет программам и скриптам получать доступ к содержимому HTML-документов, а также изменять их содержимое, структуру и дизайн.</p>
18 <p>Благодаря этому стандарту мы можем написать одну версию кода для всех браузеров. Иначе каждый браузер делал бы то, что ему хочется, и нам пришлось бы писать код для каждого браузера отдельно из-за их несовместимости.</p>
18 <p>Благодаря этому стандарту мы можем написать одну версию кода для всех браузеров. Иначе каждый браузер делал бы то, что ему хочется, и нам пришлось бы писать код для каждого браузера отдельно из-за их несовместимости.</p>
19 <p>Но все же некоторые различия есть. Браузеры развиваются с разной скоростью и не всегда успевают за изменениями в стандарте DOM. Поэтому программистам приходится ждать, пока новые функции появятся в большинстве браузеров, прежде чем использовать их.</p>
19 <p>Но все же некоторые различия есть. Браузеры развиваются с разной скоростью и не всегда успевают за изменениями в стандарте DOM. Поэтому программистам приходится ждать, пока новые функции появятся в большинстве браузеров, прежде чем использовать их.</p>
20 <p>В следующих уроках мы обсудим, как современные разработчики решают эти проблемы с помощью полифилов.</p>
20 <p>В следующих уроках мы обсудим, как современные разработчики решают эти проблемы с помощью полифилов.</p>
21 <p>DOM-дерево текущей страницы доступно в JavaScript в виде объекта document, который наполнен множеством методов для работы с этим деревом в соответствии со спецификацией DOM.</p>
21 <p>DOM-дерево текущей страницы доступно в JavaScript в виде объекта document, который наполнен множеством методов для работы с этим деревом в соответствии со спецификацией DOM.</p>
22 <p>Браузер сразу отображает любые изменения на странице:</p>
22 <p>Браузер сразу отображает любые изменения на странице:</p>
23 <h2>Восстановление</h2>
23 <h2>Восстановление</h2>
24 <p>Если передать браузеру ошибочный HTML с незакрытыми тегами, нарушенной вложенностью и другими проблемами, то никаких сообщений об ошибках не будет. Браузер примет этот HTML и отобразит что-то на экране.</p>
24 <p>Если передать браузеру ошибочный HTML с незакрытыми тегами, нарушенной вложенностью и другими проблемами, то никаких сообщений об ошибках не будет. Браузер примет этот HTML и отобразит что-то на экране.</p>
25 <p>Вам может не понравиться результат, но все сработает:</p>
25 <p>Вам может не понравиться результат, но все сработает:</p>
26 <p>Браузер восстанавливает структуру документа согласно некоторым очень хитрым правилам. По-другому его теоретически невозможно было бы обработать. Но есть и другая причина: даже если сам HTML корректен, когда мы создаем дерево DOM, браузер добавляет некоторые узлы дерева, представленные тегами HTML.</p>
26 <p>Браузер восстанавливает структуру документа согласно некоторым очень хитрым правилам. По-другому его теоретически невозможно было бы обработать. Но есть и другая причина: даже если сам HTML корректен, когда мы создаем дерево DOM, браузер добавляет некоторые узлы дерева, представленные тегами HTML.</p>
27 <p>Вы могли этого не заметить, но стандарт требует, чтобы они там были. Например, &lt;tbody&gt; добавляется в таблицы, и неважно, был он в исходном HTML или нет. Другой пример, в котором добавляется список, браузер автоматически создает корневой элемент &lt;body&gt;:</p>
27 <p>Вы могли этого не заметить, но стандарт требует, чтобы они там были. Например, &lt;tbody&gt; добавляется в таблицы, и неважно, был он в исходном HTML или нет. Другой пример, в котором добавляется список, браузер автоматически создает корневой элемент &lt;body&gt;:</p>
28 <p>DOM открывает практически безграничные возможности для изменения страниц. Все библиотеки (jquery и другие) и фреймворки (angular, react) манипулируют DOM. Это основа, вокруг которой строится все во фронтенд-разработке.</p>
28 <p>DOM открывает практически безграничные возможности для изменения страниц. Все библиотеки (jquery и другие) и фреймворки (angular, react) манипулируют DOM. Это основа, вокруг которой строится все во фронтенд-разработке.</p>