@Dimon123
Новичок, разбираюсь в веб-программировании

По каким соображения разработчики придумали блокировать построение DOM, когда браузер натыкается на скрипт в коде программы?

Привет.
Зачем браузер останавливает синтаксический анализ и построение дерева разбора DOM, когда при анализе встречает код джаваскрипт? Например, имеется HTML-файл, с ним связан CSS-файл и JavaScript-файл. Получается (если я правильно понимаю) такая схема загрузки, как на рисунке.
4ccd13af32dd4840adeb9b708c1db4b4.jpg
Если взять, например, HTML и CSS, то тут логика понятная. Анализируется HTML код (строит дерево разбора DOM), браузер встречает код CSS и параллельно начинает анализ кода стилей (строит дерево разбора стилей CSS), при этом начало отображения придерживается до тех пор, пока дерево стилей не будет готово - чтобы пользователь не увидел голый некрасивый каркас HTML без стилей. Начинается отображение и параллельная подгрузка неуспевших загрузиться картинок.
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Единственная причина - возможность использования скриптом document.write()
Вставляйте скрипты в конец документа и будет Вам счастье
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
petermzg
@petermzg
Самый лучший программист
Потому что есть метод
document.write(str);
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Алгоритм синтаксического анализа

Как уже говорилось в предыдущих разделах, синтаксический анализ кода HTML невозможно выполнить с помощью стандартных нисходящих или восходящих анализаторов.

Ниже перечислены причины этого.
  • Язык имеет "щадящий" характер.
  • В браузерах заложены механизмы обработки некоторых частых ошибок в коде HTML.
  • Цикл синтаксического анализа характеризуется возможностью повторного вхождения. Исходный документ обычно не меняется в процессе анализа, однако в случае HTML теги скрипта, содержащие document.write, могут добавлять новые токены, поэтому исходный код может меняться.
  • Так как стандартные анализаторы не подходят для HTML, браузеры создают собственные анализаторы.

Алгоритм синтаксического анализа подробно описан в спецификации HTML5.

Принципы работы современных веб-браузеров
Ответ написан
alsopub
@alsopub
Для асинхронной загрузки JS придумали параметр "async".
А вы уже обязуетесь не делать в скрипте document.write[ln](...).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы