2016-05-25 3 views
0

Скажите, если я ошибаюсь. Код JavaScript выполняется как один поток.Каков порядок выполнения, когда используются теги sync и async script?

Выполнение ниже кода JavaScript будет A, B и C, последовательно справа.

<script src="A"> .... </script> 
<script src="B"> .... </script> 
<script src="C"> .... </script> 

Выполнение ниже код будет зависеть от кода и времени, отведенного для каждого скриптов означает первый «А» начнет выполнять (или «B», не знаю), исполнение «A 'остановится, потому что время, предоставленное ему, будет полным, чем другие, получит тот же шанс сказать «B», что «C» и «A» снова возобновится, и цикл продолжается до тех пор, пока выполнение каждого скрипта не будет выполнено.

<script async src="A"> .... </script> 
<script async src="B"> .... </script> 
<script async src="C"> .... </script> 

Но что происходит, когда есть синхронные и асинхронные сценарии, как показано ниже.

<script sync src="A"> .... </script> 
<script async src="B"> .... </script> 
<script sync src="C"> .... </script> 
<script sync src="D"> .... </script> 
<script async src="E"> .... </script> 
+1

Это не так, как работает 'async'. См. Https://html.spec.whatwg.org/#attr-script-async –

+0

Не существует атрибута 'sync'. – deceze

+0

Без атрибута async его синхронизация – MTA

ответ

5

Атрибут async просто означает, что скрипт будет загружен через некоторое время и, следовательно, будет приступить к выполнению через некоторое время. <script> теги без этого атрибута будут загружены немедленно и заблокировать остальную часть страницы до завершения загрузки и выполнения.

async делает не означает, что когда запускается сценарий, она может прерваться в любой момент, а другой сценарий может начать работать. Это совместная многозадачность/планирование ЦП и абсолютно не то, что здесь происходит. Первый скрипт async, который будет завершаться при загрузке, будет запущен, пока он не будет выполнен, и в этот момент следующий скрипт начнет работать, если он есть.

Так что, да, с async вы не знаете когда скрипт начнет выполнение, но как только это произойдет, это единственное, что работает, пока он не освободит эту силу (значение сценария и/или функции выходов).

+0

Что происходит, если синхронизация и асинхронное сканирование одновременно. например . Какой сценарий будет выполняться первым. – MTA

+0

Синхронные скрипты всегда выполняются немедленно, поэтому в этом примере A явно попадает первым и будет выполнен первым. B будет выполняться * через некоторое время *. Это все довольно атомно, не так много двусмысленности: что-то уже работает? Нет? Хорошо, тогда выполните немедленно. Да? Затем планируйте его для выполнения в ближайшее возможное время. – deceze

+0

В случае '

0

Я не видел нигде атрибута sync, который мы можем использовать. Насколько я знаю, существует только способ использования атрибута: async.

Но для вашего запроса, вы должны использовать без атрибута, и это будет синхронным автоматически:

<script src="A"> .... </script> 
<script async src="B"> .... </script> 
<script src="C"> .... </script> 
<script src="D"> .... </script> 
<script async src="E"> .... </script> 

И теперь, чтобы ответить на ваш вопрос,

Асинхронные скрипты загружаются в фоновом режиме во время синхронных скриптов загружаются по порядку и также влияют на html и css.

Таким образом, мы не можем гарантировать, что, используя ваш примерный порядок скриптов с синхронными и асинхронными сценариями, поскольку асинхронные скрипты загружаются в фоновом режиме и могут быть загружены до или после других синхронных сценариев.

Смежные вопросы