#javascript #html #es6-modules
#javascript #HTML #es6-модули
Вопрос:
Представьте, что у меня есть два модуля, которые выглядят следующим образом:
<script type=“module” src="../js/module1.js"></script>
<script type=“module” src="../js/module2.js"></script>
Ни один из них не импортирует друг из друга.
Если module1
выполняется раньше module2
, означает ли это, что при module1
извлечении из стека вызовов (и после того, как микро-очередь будет очищена и, возможно, будет выполнен некоторый рендеринг), стек вызовов будет пустым, что потенциально позволяет module2
получить на него нажатие? В принципе, module1
amp; module2
рассматриваются как две отдельные макрозадачи или они рассматриваются как один большой скрипт?
Комментарии:
1. При каких условиях загрузки? Вы думаете, что два независимых модуля загружаются с помощью
async
? Один модуль, который импортирует другой модуль? (такое ощущение, что детали, которые вызвали этот вопрос, отсутствуют atm)2. @Mike’Pomax’Camermans Спасибо за комментарий, включил некоторые детали. Надеюсь, этого достаточно
3. Похоже, что вам не хватает
async
атрибута, по крайней мере (и, вероятно, такжеdefer
), что значительно изменило бы ответ.4. @Mike’Pomax’Camermans У меня создалось впечатление, что модули имеют
defer
атрибуты неявно (поиск «отложить» на этом сайте: javascript.info/modules-intro )5. Верно. Вы все еще хотите
async
, хотя.
Ответ №1:
Да, они в основном рассматриваются как две «макрозадачи», хотя на самом деле это еще не часть цикла событий, поэтому они на самом деле не являются «задачами» в очереди, которые были бы поставлены в очередь.
Поскольку элементы вашего скрипта являются module
скриптами без async
атрибутов, мы переходим к этому шагу модели обработки, которая добавит его в список скриптов, которые будут выполняться после завершения синтаксического анализа документа, который будет очищен в «конце» обработки.
Следующий момент, на который мы хотим обратить внимание, — это алгоритм «запустить сценарий модуля», который будет вызван «как только» независимо от того, что происходит последним между завершением выполнения предыдущего сценария или готовностью сценария, как часть алгоритма выполнения блока сценария.
Из этого алгоритма «запустить сценарий модуля» мы можем видеть, что в конце браузер должен
- Очистка после запуска скрипта с настройками.
И сам алгоритм очистки после запуска выполняет
Так что это очень похоже на то, если бы они действительно рассматривались как две отдельные задачи.
Что касается рисования, это действительно может произойти, поскольку в конце синтаксического анализа при выполнении этих сценариев браузер должен
- Запускайте цикл событий до первого
script
…
и что во время запуска цикла событий браузер действительно может рисовать.
Комментарии:
1. Спасибо, что указали мне на спецификацию. Также приятно ссылаться