2

  • или загружен из внешнего URI
  • Это идеально подходит для создания всплывающих маркеров в Google Maps, которые имеют оптимальную «уникальность» (то есть, нет двух маркеров, которые будут иметь одинаковые цвета). 1 , не имеет атрибута ]
  • (только внешние сценарии) defer или async ссылка, которая охватывает действительно все случаи?
  • включен в статический источник или динамически добавлен другими сценариями (при разных состояниях разбора, разными методами)

HTML onEvent — атрибуты [ 3 ], уже есть 16 альтернатив для запуска JS, и я уверен, что что-то забыл.

Меня не очень беспокоит быстрая (параллельная) загрузка, мне более интересно узнать порядок выполнения (который может зависеть от порядка загрузки) и for … в ). Итератор — это объект, соответствующий определению Итератора в спецификации. Это jsfiddle Например, http://www.websiteoptimization.com/speed/tweak/defer/ Нет предсказуемого порядка среди нескольких асинхронных объектов. Если требуется предсказуемый порядок, его необходимо кодировать путем регистрации уведомлений о загрузке из асинхронных сценариев и ручной последовательности вызовов javascript при загрузке соответствующих объектов. Касается только 6 из них и тестирует в основном старые браузеры.

также может печатать на терминал в

Если вы не динамически загружаете скрипты или помечаете их как defer или async, тогда скрипты загружаются в порядке, встречающемся на странице. Неважно, является ли это внешним скриптом или встроенным скриптом — они выполняются в порядке, в котором они встречаются на странице. Встроенные сценарии, которые идут после внешних сценариев, сохраняются до тех пор, пока все внешние сценарии, которые были до них, не загружены и запущены.

Асинхронные сценарии (независимо от того, как они указаны как асинхронные) загружаются и запускаются в непредсказуемом порядке. Браузер загружает их параллельно, и он может запускать их в любом порядке.

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

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

Тег сценария с async На этот вопрос уже есть ответ: async заключается в том, что он может работать в любое время, и это время не предсказуемо.

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

Вот цитата из этой статьи:

вставленные сценарии сценарии выполняются асинхронно в IE и WebKit, но синхронно в Opera и Firefox до 4.0.

Соответствующая часть спецификации HTML5 (для новых совместимых браузеров) — говорится, что . Там много написано об асинхронном поведении. Очевидно, что эта спецификация не относится к более старым браузерам (или браузерам с плохим подтверждением), поведение которых вам, вероятно, придется проверить, чтобы определить.

Цитата из спецификации HTML5:

Затем, необходимо следовать первой из следующих опций, описывающих ситуацию:

Если элемент имеет атрибут src, а элемент имеет атрибут defer, и элемент помечен как «вставленный синтаксический анализатор», а элемент не имеет асинхронного атрибута Элемент должен быть добавлен в конец списка сценариев, которые будут выполняться после завершения анализа документа, связанного с Document синтаксического анализатора, создавшего элемент.

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

Проблема становится еще более очевидной, когда Работа с Элемент — это ожидающий сценарий блокировки синтаксического анализа Document анализатора, который создал элемент. (Одновременно может быть только один такой сценарий для каждого документа.)

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

Если элемент не имеет атрибута src, и элемент помечен как «вставленный синтаксический анализатор», а документ HTML-анализатора или синтаксический анализатор XML, создавший элемент script, имеет таблицу стилей, которая блокирует сценарии { *} Элемент является ожидающим сценарием парсинга-блокировки Document анализатора, который создал элемент. (Одновременно может быть только один такой сценарий для каждого документа.) Установите флаг элемента «готов к выполнению парсером». Парсер будет обрабатывать выполнение скрипта.

Элемент должен быть добавлен в конец списка сценариев, которые будут выполняться в максимально короткие сроки, связанные с Документом элемента сценария, во время запуска алгоритма подготовки сценария.

Если элемент имеет атрибут src, не имеет атрибута async и не имеет установленного флага «force-async» {* } Чтобы эффективно передать составное значение (например, ответ Задача, которую источник сетевой задачи помещает в очередь задач после завершения алгоритма выборки, должна выполнить следующие шаги:

Если элемент не является первым элементом в списке сценариев, которые будут выполняться в порядке как как можно скорее, к которому он был добавлен выше,

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

Выполнение: Выполнить блок сценария, соответствующий первому элементу сценария в этом списке сценариев, который будет выполняться по порядку как можно скорее.

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

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

, если у элемента есть атрибут вставки Элемент должен быть добавленным к набору сценариев, которые будут выполняться как можно быстрее элемента Document элемента script в момент запуска алгоритма подготовки сценария.

В противном случае

Пользовательский агент должен немедленно выполнить блок сценария, даже если другие сценарии уже выполняются. Чтобы проверить этот факт:

. Браузер выполнит сценарии в порядке их поиска. Если вы вызываете внешний скрипт, он будет блокировать страницу, пока скрипт не будет загружен и выполнен.

Динамически добавленные сценарии выполняются, как только они добавляются в документ.

// file: test.php
sleep(10);
die("alert('Done!');");

// HTML file:
<script type="text/javascript" src="test.php"></script>

Порядок оповещений «добавлен» — & Gt ; «Привет!» — & gt ; «final»

Динамически добавленные сценарии выполняются, как только они добавляются в документ.

<!DOCTYPE HTML>
<html>
<head>
    <title>Test</title>
</head>
<body>
    <script type="text/javascript">
        var s = document.createElement('script');
        s.type = "text/javascript";
        s.src = "link.js"; // file contains alert("hello!");
        document.body.appendChild(s);
        alert("appended");
    </script>
    <script type="text/javascript">
        alert("final");
    </script>
</body>
</html>

) тогда вы получите ошибку.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ <script>do something with #blah</script><div id="blah"></div> Отличная сводка от

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