Почему анализ HTML не останавливается, когда я использую встроенный тег <script>? - PullRequest
0 голосов
/ 02 апреля 2020

Я начал изучать веб-программирование для первого ...

Я узнал, что поток синтаксического анализа 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 и почему первый вывод запустить после завершения встроенного скрипта?


Я прочитал следующее, но у меня нет четкого ответа ...

Большое спасибо за чтение моего вопроса!

1 Ответ

0 голосов
/ 02 апреля 2020

Рендеринг не выполняется при запуске скрипта.

Но рендеринг разрешен во время ожидания загрузки сетевого ресурса. Таким образом, в case2.html все, что было проанализировано перед тегом <script>, отображается во время ожидания получения скрипта. Затем он блокирует и выполняет скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...