Я создал пример ниже, где страница динамически загружает temp.js внизу HTML-страницы.В temp.js есть небольшая функция сна, которая привязывает браузер на 3 секунды, прежде чем регистрировать «Script Loaded».В самом низу HTML-страницы записывается «Страница загружена»
Теперь, зная, что я знаю о браузерах, загрузке ресурсов и однопоточной природе JS, я думал, что это произойдет.
- Отображается HTML
- console.log 'Page Loaded'
- Около трех секунд ожидания, пока temp.js все набирает
- console.log говорит мне 'Script Loaded '
, но на самом деле происходит следующее:
- console.log' Page Loaded '(почти мгновенно)
- Пустая страница около трехсекунд
- Отображается HTML и console.log сообщает мне 'Script Loaded'
Вы ожидаете такого поведения?
function sleep (ms) {
var now = (new Date()).getTime ();
while ((now + ms) > ((new Date()).getTime ())) {
}
}
sleep (3000);
console.log ('Script Loaded');
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>querySelectorAll</title>
</head>
<body>
<ul>
<li><a href="">One</a></li>
<li><a href="">Two</a></li>
</ul>
<div id="nick">
<img src="image.png" alt="" width="10" height="10" />
<img src="image.png" alt="" width="10" height="10" />
<img src="image.png" alt="" width="10" height="10" />
</div>
<!-- <script type="text/javascript" src="temp.js"></script> -->
<script type="text/javascript">
(function() {
var e = document.createElement('script');
e.src = 'temp.js';
e.async = true;
document.getElementsByTagName("head")[0].appendChild(e);
})();
</script>
<script type="text/javascript">
console.log('Page Loaded');
</script>
</body>
</html>