Править: Поскольку Andrew Moore указал, что этим вопросом является дубликат Двух отдельных тегов script для Google Analytics? Таким образом, этот вопрос должен быть удален, чтобы не создавать помехи Переполнению стека, если нет точка в хранении этого, так как это, вероятно, обнаружится в немного отличающихся поисках.
Какое значение это имеет для использования больше чем одного блока сценария на веб-странице? Я вставил в стандартном коде для включения Google Analytics как пример, и я видел тот же шаблон, используемый в других местах. Почему этот код разделен на два отдельных блока сценария вместо того, чтобы просто использовать единственный?
Второй содержит код, который зависит от загрузки
google-analytics.com/ga.js
.
Не отложенные сценарии выполняются в том порядке, в котором они существуют в DOM.
Первый внедряет после себя новый
(с
src
, указывающим на ga.js
компании google), который немедленно загружается и выполняется - только после этого выполняется второй .
Теги
выполняются последовательно. Блок не может быть выполнен, если предыдущий блок не закончил выполнение.
Первый тег отвечает за создание тега Google
, который загрузит внешний js. После завершения выполнения первого
DOM выглядит следующим образом:
<script></script> <!-- First Script Tag -->
<script></script> <!-- Google Injected Script -->
<script></script> <!-- Second Script Tag -->
Это гарантирует, что второй тег не будет выполняться, пока не будет загружен
.js
. Если бы первый и второй были объединены, это привело бы к тому, что переменная
_gat
оказалась бы неопределенной (поскольку внедренный Google скрипт не начнет загружаться, пока не завершится выполнение первого скрипта).
Если код в первых блоках заканчивается исключением, то вторая часть тоже сработает.
В вашем примере первый блок сценария использует document.write
для записи другого элемента сценария, который загружает внешний сценарий, а затем второй элемент сценария использует вещи, определенные в этом внешнем сценарии. Я совершенно уверен, что разделение на два блока сценариев необходимо для того, чтобы это работало.
Если вы не используете такие странные ухищрения, то размещение нескольких блоков сценариев в ряд обычно не дает ничего особенного. Размещение их в разных частях страницы полезно, когда вы хотите, чтобы сценарии выполнялись во время загрузки документа. Если ваша страница очень длинная, вы можете захотеть, чтобы какой-то сценарий выполнялся во время загрузки, чтобы инициализировать все как можно быстрее. Замена элементов на виджеты должна быть выполнена как можно раньше, чтобы избежать прыжков, когда страница в конце концов закончит загрузку.