Я работал над добавлением атрибута defer для внешних скриптов, используемых в разделе HEAD одного из моих проектов. У меня был запрос на порядок выполнения нескольких отложенных тегов script.
Ниже приведены мои наблюдения, которые помогут нам лучше понять мой запрос:
Согласно http://www.w3.org/TR/html5/scripting-1.html
присутствует атрибут defer, тогда script выполняется, когда страница закончила синтаксический анализ
Атрибут defer работает. Но, я сомневаюсь в порядке исполнения. Похоже, что он отличается от FF и Chrome.
Как и в моем случае:
<script defer="defer" src="{SERVER_PATH}/deps.js?1441452359"></script>
<script defer="defer" src="{SERVER_PATH}/script1.js?1440067073"></script>
<script defer="defer" src="{SERVER_PATH}/script2.js?1441451916"></script>
Здесь deps.js представляет собой огромный файл размером около 120kb (gzipped), тогда как сценарий1-3 имеет обычный размер 20-50kb (gzipped).
В Firefox выполнение defer'ed script начинается в порядке появления, но не выполняется в том же порядке. Если на хром, если предыдущий script завершает выполнение, следующий запуск script не запускается. Похоже, Chrome имеет смысл.
Чтобы проверить порядок выполнения, я вставил console.log в первую и последнюю строку каждого сценария, например. в deps.js
console.log("Execution Start: deps");
// minified deps script content.
console.log("Execution End: deps");
Ниже консольного вывода в Firefox:
Execution Start: deps
Execution Start: script1
Execution Start: script2
// Script Error as script1 needs deps to render completely.
// Script Error as script2 needs deps to render completely.
Execution End: deps
Ниже консольного вывода в Chrome:
Execution Start: deps
Execution End: deps
Execution Start: script1
Execution End: script1
Execution Start: script2
Execution End: script2
Однако поведение на FF не всегда, как показано выше. Иногда это работает как Chrome. Это похоже на проблему, которая является только Firefox. Или, может быть, это из-за того, что файл deps.js является тяжелым и минимизированным и занимает время для рендеринга.
Может ли кто-нибудь из подобного опыта с отсрочкой помочь мне? Пожалуйста, дайте мне знать, если потребуется какая-либо другая информация.
PS: Другие решения, такие как перемещение скриптов в нижней части страницы, не являются тем, что я рассматриваю в этот момент.