Что ж, встраивание document.write в часть скрипта фактически заставляет браузер интерпретировать это сразу, поскольку вы можете выводить туда разные вещи, в том числе, например, начало комментария (<!--
), которое сделает недействительными остальные.
Если вы хотите избежать выполнения Javascript, блокирующего загрузку страницы, вы должны использовать внешний файл и атрибут defer
. Это скажет браузеру, что этот скрипт не нужно интерпретировать сразу, чтобы браузер мог продолжить рендеринг страницы:
<script type="text/javascript" src="delay.js" defer="defer"></script>
Однако, если вы сделаете это, вы не сможете встроить вывод с помощью document.write, как вы это сделали в своем примере.
Но это не должно быть проблемой. Вы можете добавить объект в том же месте и указать в своем сценарии следующее.
document.getElementById("output").innerHTML = "Hello";
Кроме того, если вы используете defer
в скрипте, то переменные вашего скрипта не будут сразу доступны для других не отложенных блоков скрипта в вашем приложении (по понятным причинам, они еще не могут быть загружены!).
Во-вторых, не используйте цикл для эмуляции задержки. Я не могу не подчеркнуть, насколько это плохо. Я полагаю, вы использовали это только ради простоты.