Как стать автором
Обновить

Комментарии 4

Интересная статья

Автор, скажите: за счёт чего современные браузеры при первой загрузке страницы позволяют отрисовать хотя бы часть страницы?

Я замечал, что для отрисовки контента браузерам вовсе не обязательно дожидаться скачивания всех ресурсов и построения Render Tree

Это особенно заметно в SPA-приложениях: когда браузер успевает отобразить HTML ДО того, как в <div id="root"></div> подгрузится бандл

Не уверен, что понял вопрос правильно. Но JS-скрипт действительно может быть загружен после всех остальных элементов. Это не фича современных браузеров, так было всегда.

Если коротко, <script> тэг, по умолчанию грузится в синхронном режиме и блокирует построение Render Tree, пока не будет полностью загружен. Чтобы разблокировать рендеринг, раньше была практика размещать скрипты в конце body, после всех остальных элементов. Это позволяло браузеру загрузить весь статический контент до начала обработки JS.

Сейчас необходимости в этом нет. Спецификация режим загрузки скриптов можно контролировать самостоятельно, указав атрибуты async или defer (они взаимоисключающие и не могут использоваться вместе).

Режим async говорит браузеру, что скрипт должен грузиться асинхронно, т.е. он не будет блокировать основной поток и будет поставлен на исполнение по факту своей загрузки. По умолчанию, скрипты имеют значение async=false. Для включания асинхронного режима нужно указать атрибут <script src="..." async> (src у такого скрипта обязателен, если src не указан, async не будет иметь эффекта). Если скрипт был добавлен в DOM динамически, например, создан через document.createElement, он, по умолчанию будет иметь async=true, но его можно переопределить вручную (script.setAttribute("async", false)).

Атрибут defer оставляет загрузку скрипт в синхронном режиме, но ставит его в конец очереди, после всех остальных элементов. Если на странице есть несколько defered скриптов, они будут поставлены в очередь в том порядке, в котором были встречены парсером.

Мне кажется что тут скорее не в браузере дело, а в самих сайтах и фреймворках: можно сделать так чтобы вначале подгружался минимальный HTML и CSS, а в конце разметки вставить полные описания стилей и скрипты, которые весь интерфейс отрисуют. Веб-фреймворки тоже такое могут делать на полуавтомате - подгрузить первым делом скелет, а после асинхронно остальной фарш.

Познавательная статья)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории