Ответ 1
Вопросы заказа в возможно одной или нескольких следующих ситуациях:
- Когда один из ваших скриптов содержит зависимости от другого script.
-
Если script находится в BODY, а не в HEAD.. ОБНОВЛЕНИЕ: HEAD vs BODY, похоже, не имеет значения. Вопросы для заказа. Период. - Когда вы запускаете код в глобальном пространстве имен, для которого требуется зависимость от другого script.
Лучший способ избежать этих проблем - убедиться, что код в глобальном пространстве имен находится внутри обертки $(document).ready()
. Код в глобальном пространстве имен должен быть загружен в таком порядке, чтобы сначала был определен исполняемый код.
Проверка консоли ошибок JavaScript в Firebug или отладчике Chrome может рассказать вам, что происходит в script, и сообщить вам, что нужно изменить для вашей новой настройки.
Заказ вообще не имеет значения, вызываются ли функции на основе событий, таких как pageload, клики, вставленные или удаленные узлы и т.д. Но если вызовы функций выполняются вне событий в глобальном пространстве имен, то есть когда проблемы будут возникают. Рассмотрим этот код:
JS файл: mySourceContainingEvilFunctionDef.js
function evilGlobalFunctionCall() {
alert("I will cause problems because the HTML page is trying to call " +
"me before it knows I exist... It doesn't know I exist, sniff :( ");
}
HTML:
<script>
evilGlobalFunctionCall(); // JS Error - syntax error
</script>
<!-- Takes time to load -->
<script type="text/javascript" src="mySourceContainingEvilFunctionDef.js"></script>
...
В любом случае приведенные выше советы помогут предотвратить эти проблемы.
В качестве дополнительной заметки вы можете подумать, что есть определенные преимущества скорости использования асинхронного характера браузера для вытягивания ресурсов. Веб-браузеры могут одновременно открывать до 4 асинхронных подключений, что означает, что вполне возможно, что ваш один массивный script может занять больше времени, чем тот же script разбивается на куски! Существует также Yahoo Research, в котором показано, что сочетание скриптов дает более быстрый результат, поэтому результаты варьируются от одной ситуации к другой.
Поскольку это баланс между временем, затрачиваемым на открытие и закрытие нескольких HTTP-соединений, а также время, затрачиваемое на ограничение одного соединения вместо нескольких асинхронных подключений, вам может потребоваться провести некоторое тестирование на вашем конце, чтобы проверить, что работает лучше всего в вашей ситуации. Возможно, время, затраченное на открытие всех соединений, компенсируется тем фактом, что браузер может загружать все сценарии асинхронно и превышать задержки при открытии/закрытии соединений.
С учетом сказанного, в большинстве случаев объединение script, скорее всего, приведет к быстрому увеличению скорости и считается наилучшей практикой.