Убедитесь, что сначала запускается сценарий Javascript?

StackOverflow https://stackoverflow.com/questions/9387200

Вопрос

Я заметил, что некоторые скрипты вызываются раньше других на определенной странице. Мне было интересно, каков конкретный порядок загрузки скриптов?На странице перед указанными скриптами .js?Выполняются ли они в порядке от первого упомянутого генерического кода тега до последнего на странице, или это зависит от браузера?Как можно убедиться, что конкретный сценарий запускается первым на странице?

Это было полезно?

Решение

<цитата>

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

Это установлено W3C в их языковых спецификациях. Например, для спецификации HTML 4.01 он определен в Раздел 18.2.4 Динамическое изменение документов, элемент 1 .

<цитата>

На странице перед указанными скриптами .js?

См. выше. Нет, встроенные и связанные скрипты обрабатываются одинаково.

<цитата>

Выполняются ли они в порядке от первого упоминания до последнего на странице, или это зависит от браузера?

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

Еще одна вещь, на которую следует обратить внимание, - это определение слова "бег". Это может показаться семантическим анализом, но это не так. JavaScript, как и любой язык программирования, спроектирован так, чтобы вести себя в соответствии со стандартами. JavaScript указан в ECMA-262 5.1 Edition / июнь 2011 г. стандартная для оценки слева направо в разделе 7 «Лексические соглашения». (Окончание строки рассматривается как крайний левый символ следующей строки.) Этот документ также предоставляет соглашения о порядке, в котором оцениваются операторы и другие операции, такие как операторы WHILE или FOR.

<цитата>

Как убедиться, что конкретный скрипт запускается первым на странице?

(1) Поместите его вверху и (2) выберите браузер, реализующий спецификацию языка.

Однако я думаю, что за этим вопросом может стоять нечто большее. Если вы пытаетесь остановить выполнение неожиданного кода, вам придется заблокировать его до тех пор, пока обработчик событий ONLOAD не зарегистрирует, что страница завершена. (Просто заключите свои операции в функцию или заключите их в IF, чтобы проверить наличие логического флага, т.е. isLoaded устанавливается в true с помощью ONLOAD.) Затем, когда запускается обработчик события ONLOAD, вы можете запускать операции по своему собственному расписанию без необходимость беспокоиться о таких вещах, как неустановленные объекты DOM.

Другие советы

Пока скрипты не загружаются динамически или не помечены как асинхронные или отложенные, скрипты запускаются или оцениваются в том порядке, в котором они встречаются на странице.Итак, первые встреченные скрипты запускаются первыми.

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

Итак, порядок оценки обычного (не асинхронного, не отложенного) JavaScript на 100% определяется порядком, в котором он встречается на странице.

По умолчанию теги script загружаются и оцениваются последовательно, как только они встречаются в документе HTML.

Однако, если вы используете атрибуты async или defer, выполнение происходит либо после завершения загрузки сценария (асинхронно), либо после завершения загрузки страницы (отложить).

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

Однако async и defer могут переопределить это для браузеров, в которых они реализованы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top