@segfaultBut, но я не знаю, ошибаетесь ли вы, но чтобы получить ответ на этот вопрос, вы говорите: «но кажется, что для выполнения кода JavaScript необязательно, чтобы он выполнялся полностью» (пример синхронная среда) Что вы имеете в виду именно под "разбором". Какой парсер? Анализатор HTML?

с о следующем коде:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Test</title>
</head>
<body>
    One line of HTML code
    <script>
        // Synchronous delay of 5 seconds
        var timeWhile = new Date().getTime();
        while( new Date().getTime() - timeWhile < 5000 );
    </script>
</body>

Я протестировал его в Firefox и Chrome, и они показывают (рендеринг): «Одна строка HTML-кода» через 5 секунд, а не в течение 5 секунд. Почему браузер делает это?

Я понимаю, почему браузер должен останавливать рендеринг при выполнении JavaScript, потому что вы можете изменить стиль элементов с помощью JavaScript (в качестве примера). Это создаст проблемы, если браузер будет показывать и изменять контент в одно и то же время. Вот почему браузер блокирует рендеринг при выполнении JavaScript.

В приведенном выше примере при запуске с JavaScript «одна строка HTML-кода» уже анализируется «HTML-парсером». Это необходимо, потому что JavaScript может содержать, например, document.write, поэтому добавленная строка должна идти после предыдущего HTML. Очевидно, между «разбором HTML» и отображением / рендерингом того же HTML существует некоторое время, потому что в противном случае браузер в этом примере уже показал бы что-то в течение 5 секунд, но это не так.

Когда вы заменяете «Одну строку HTML-кода» большим количеством HTML-кода, браузер уже будет показывать некоторый контент в течение 5 секунд, поэтому в принципе возможно показывать уже некоторый контент.

Если бы я был браузером, я бы сделал:

Разбор "Одна строка HTML-кода"Видя какой-то блок JavaScriptЗакончите рендеринг HTML, предшествующего «блоку JavaScript», чтобы браузер отобразил на этом этапе: «Одна строка HTML-кода»Теперь приостановите рендеринг и выполните код JavaScript.После выполнения кода JavaScript снова начните рендеринг.

В примере, подобном этому, браузер может показывать некоторый контент на 5 секунд раньше. Это большой выигрыш в скорости рендеринга.

Может быть, это то, что браузеры могут улучшить, но, возможно, есть другая причина. Может быть, кто-то знает об этом больше и может мне это объяснить.

Ответы на вопрос(2)

Ваш ответ на вопрос