Какая разница в использовании нескольких блоков script на веб-странице?

Edit: As Andrew Moore указал, что этот вопрос является дубликатом двух отдельных тегов script для Google Analytics? Таким образом, этот вопрос следует удалить, чтобы избежать, если только не существует смысла в его сохранении, поскольку он, вероятно, будет отображаться в несколько разных поисковых запросах.

Какая разница в использовании более чем одного блока script на веб-странице? Я применил стандартный код для включения Google Analytics в качестве примера, и я видел тот же шаблон, который использовался в других местах. Почему этот код разделен на два отдельных блока script вместо простого использования одного?

<script type="text/javascript">
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
    try{
        var pageTracker = _gat._getTracker("UA-xxxxxx-x");
        pageTracker._trackPageview();
    } catch(err) {}
</script>

Ответ 1

Второй <script> содержит код, который зависит от загрузки google-analytics.com/ga.js.

Отложенные сценарии выполняются в том порядке, в котором они существуют в DOM.

Первый <script> вводит новый <script> после себя (с src, указывающим на google ga.js), который сразу загружается и выполняется - только тогда выполняется второй <script>.

Ответ 2

Теги

<script> выполняются последовательно. Блок <script> не может выполняться, если предыдущий не выполнен.

Первый тэг <script> отвечает за создание тега Google <script>, который загрузит внешние js. После завершения первого <script> выполнения DOM выглядит следующим образом:

<script></script> <!-- First Script Tag -->
<script></script> <!-- Google Injected Script -->
<script></script> <!-- Second Script Tag -->

Это гарантирует, что второй тег <script> не будет выполняться до тех пор, пока не будет выполнена загрузка .js. Если первый и второй <script> будут объединены, это приведет к тому, что переменная _gat будет undefined (поскольку введенный Google script не начнет загружаться до тех пор, пока не будет выполнен первый script).

Ответ 3

В вашем примере первый блок script использует document.write для записи другого элемента script, который загружает внешний script, а затем второй элемент script использует вещи, определенные в этом внешнем script, Я уверен, что для его работы необходимо разделить его на два блока script.

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

Ответ 4

Если код в первых блоках заканчивается исключением, вторая часть тоже будет работать.