Код Javascript, выполняемый до загрузки и анализа css

Я читал об асинхронных сценариях в веб-приложениях и наткнулся на эту статью. В двух словах, в нем говорится, что сценарии javascript не выполняются до тех пор, пока не будут загружены и проанализированы все таблицы стилей css. Поэтому я попытался проверить это на себе на небольшом примере.

Как вы можете видеть в отчете о производительности, скрипт jquery отлично выполняется сам по себе, а затем загружается и анализируется css.

Может кто-нибудь объяснить, почему такое поведение?

Из-за этого CSS может блокировать синтаксический анализ в зависимости от порядка внешних таблиц стилей и скриптов в документе. Если в документе перед сценариями размещены внешние таблицы стилей, построение объектов DOM и CSSOM может мешать друг другу. Когда синтаксический анализатор достигает тега script, построение DOM не может продолжаться до тех пор, пока не завершится выполнение JavaScript, а JavaScript не может быть выполнен до тех пор, пока CSS не будет загружен, проанализирован и CSSOM станет доступным.

источник

<!DOCTYPE html>
<html lang="en">

  <head>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />

    <meta
      name="description"
      content="Web site created using create-react-app"
    />
    <title>React App</title>
  </head>

  <body>


    <link rel="preload" onload="this.rel='stylesheet'" as="style" href='https://s3-eu-west-1.amazonaws.com/welcome.b2b.test/form/bundle.css'/>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"/>
    <script>
      window.onload = function() {
        console.log("window");
      };
    </script>
  </body>
</html>

введите здесь описание изображения


person George Paouris    schedule 30.03.2020    source источник
comment
Вы спрашиваете, почему кто-то захочет запустить JS раньше, чем CSS?   -  person Jordan Cauley    schedule 07.04.2020
comment
Я говорю, что в статье говорится, что js всегда выполняется после анализа css. Я не вижу здесь такого поведения   -  person George Paouris    schedule 07.04.2020


Ответы (1)


Причина, по которой вы не видите здесь такого поведения, заключается в том, что файл CSS не передается как анализируемый результат, вы предварительно загрузили ресурс, но не зарегистрировали его как CSS, поэтому ваш CSS будет работать после JS, но когда он станет стилем. лист, он заблокирует нить в это время.

person Jordan Cauley    schedule 07.04.2020
comment
Нет параметров css для предварительной загрузки. Кроме того, проблема заключалась в том, что у меня был отключен кеш в инструментах разработчика. - person George Paouris; 08.04.2020