Если вам нужны асинхронные сценарии. Используйте асинхронный тег (HTML5), если он доступен в браузере, в котором вы находитесь. Это то, что Google Analytics делает в опубликованном вами коде (особенно в строке).ga.async = true
MDN Link, прокрутите вниз для асинхронного ).
Однако это может привести к загрузке вашего скрипта в произвольные моменты времени при загрузке страницы - что может быть нежелательно.Стоит задать себе следующие вопросы, прежде чем выбрать использование async.
Не нужно вводить пользователя? Затем использовать атрибут async.
Необходимо ответитьк кнопкам или навигации? Тогда вам нужно поместить их в верхнюю часть страницы (в заголовке) и не использовать асинхронный тег.
Асинхронные сценарии выполняются в любом порядке, поэтому, если ваш сценарий зависитна (скажем) jQuery, а jQuery загружен в другой тег, ваш скрипт может быть запущен раньше, чем скрипт jQuery, что приведет к ошибкам.
Почему не люди помещают вещи внизу тега body? Если скрипт загружается достаточно времени, чтобы замедлить / приостановить загрузку сайта,вполне возможно, что этот сценарий приостановит / повесит веб-сайт после загрузки веб-сайта (ожидайте различного поведения в разных браузерах) - в результате ваш веб-сайт перестанет отвечать на запросы (нажмите кнопку, и ничего не произойдет).В большинстве случаев это не идеально, поэтому был изобретен атрибут async.
В качестве альтернативы, если загрузка скрипта занимает много времени - вы можете (после тестирования) минимизировать и объединить ваш скрипт перед отправкой на сервер.
Я рекомендую использовать require.js для минимизации и объединения, его легко запустить и использовать.
Сокращение сокращает объем данных, которые необходимо загрузить.
Объединение сценариев сокращает количество "обращений" к серверу (для удаленного сервера с пингом 200 мс 5 запросов занимает 1 секунду).