Я начал изучать веб-программирование для первого ...
Я узнал, что поток синтаксического анализа HTML приостанавливается, когда находит тег <script>
, и перезапускается после запуска сценария. поэтому я проверил это во многих отношениях и нашел что-то трудное для понимания. Первый пример под названием case1.html
использует встроенный тег script. Другой файл под названием case2.html
использует внешний файл сценария (case2.js
).
case1. html
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Case 1 Ttitle</title>
</head>
<body>
<p>Before external script</p>
<script>
var delay = 5000;
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
</script>
<p>after external script</p>
</body>
</html>
case2. html
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Case 2 Ttitle</title>
</head>
<body>
<p>Before external script</p>
<script src="./case2.js"></script>
<p>after external script</p>
</body>
</html>
case2. js
var delay = 5000;
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
Насколько я понимаю, два результата должны быть одинаковыми, но они были совершенно разными. Я тестировал с использованием последней версии браузера хром .
В case1.html
сначала ничего не было, а затем через пять секунд весь текст был напечатан, как показано на правом рисунке. .
Используя инструменты разработчика, я посмотрел на поток выполнения: я не знаю, почему синтаксический анализ HTML идет в одном потоке без прерывания и запуска сценария одновременно ... и есть два «рисовать» секции (зеленые) после пятисекундного сценария оценки. и выполнение сценария и синтаксический анализ повторяются.
В 'case2. html' предложение перед сценарием было напечатано сразу, а затем через 5 секунд было напечатано другое предложение. Есть два раздела синтаксического анализа: один перед сценарием оценки, а другой сзади.
Я знаю, что синтаксический анализ потока HTML приостанавливается, когда он находит тег <script>
, и перезапускается после запуска сценария. Случай 2 имеет смысл, но я не могу понять результат случая 1 ...
Мой вопрос: почему синтаксический анализ HTML продолжается в случае 1 и почему первый вывод запустить после завершения встроенного скрипта?
Я прочитал следующее, но у меня нет четкого ответа ...
Большое спасибо за чтение моего вопроса!