Уже есть несколько ответов, каждый из них отлично работает, но все они зависят от того, чтобы убедиться, что jQuery загружен синхронно, прежде чем какие-либо зависимости пытаются его использовать. Этот подход очень безопасен, но он также может представлять неэффективность, поскольку никакие другие ресурсы не могут быть загружены / запущены во время загрузки и анализа скрипта библиотеки jQuery. Если вы поместите jQuery в голову с помощью встроенного тега, браузер пользователей будет бездействовать во время загрузки и обработки jQuery, когда он может выполнять другие действия, такие как загрузка изображений, загрузка других скриптов и т. Д.
Если вы ищете быстрое реагирование при запуске, каждая миллисекунда считается.
Большую помощь мне за последний год оказал Стив Соудерс, сначала когда он работал в Yahoo, а теперь в Google. Если у вас есть время, посмотрите его слайды для Даже более быстрых веб-сайтов и Высокопроизводительных веб-сайтов . Отлично. Для огромного перефразирования, продолжайте здесь.
При подключении файлов JavaScript к DOM было обнаружено, что размещение встроенного тега в документа приводит к блокировке большинства браузеров во время загрузки и анализа этого файла. IE8 и Chrome являются исключениями. Чтобы обойти это, вы можете создать элемент «script» через document.createElement, установить соответствующие атрибуты и затем прикрепить его к заголовку документа. Этот подход не блокирует ни в одном крупном браузере.
<script type='text/javascript'>
// Attaching jQuery the non-blocking way.
var elmScript = document.createElement('script');
elmScript .src = 'jQuery.js'; // change file to your jQuery library
elmScript .type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild( elmScript );
</script>
Это гарантирует, что jQuery при загрузке и анализе не блокирует загрузку и анализ любых других изображений или файлов javascript. Но это может представлять проблему, если у вас есть скрипт, который зависит от того, jQuery заканчивает свою загрузку раньше, чем jQuery. jQuery не будет там, и вы получите сообщение о том, что $ или jQuery не определены.
Итак, чтобы убедиться, что ваш код будет работать, вы должны выполнить некоторую проверку зависимостей. Если ваши зависимости не соблюдены, подождите немного и попробуйте снова.
<script type='text/javascript'>
runScript();
function runScript() {
// Script that does something and depends on jQuery being there.
if( window.$ ) {
// do your action that depends on jQuery.
} else {
// wait 50 milliseconds and try again.
window.setTimeout( runScript, 50 );
}
}
</script>
Как я уже говорил ранее, с подходами, показанными ранее, проблем нет, все они действительны и все работают. Но этот метод гарантирует, что вы не блокируете загрузку других элементов на странице во время ожидания jQuery.
Этот подход будет работать для любого файла, поэтому, если вам нужно включить файлы 10 js, вы можете прикрепить каждый из них, используя этот метод. Вам просто нужно убедиться, что ваша функция проверки проверяет каждую зависимость перед запуском.