в чем разница / преимущество / недостаток написания скрипта внизу страницы и написания скрипта в
$(document).ready(function(){});
javascript
jquery
Сурав
источник
источник
Ответы:
Само по себе очень мало, в любом случае DOM будет готов для вас (я нервничал по этому поводу, пока не прочитал это из Google ). Если вы воспользуетесь уловкой конца страницы, ваш код может быть вызван хоть чуть-чуть раньше, но это не имеет значения. Но что более важно, этот выбор относится к тому, где вы связываете свой JavaScript на странице.
Если вы включите свой
script
тег в тегhead
и полагаетесь на негоready
, браузер обнаружит вашscript
тег до того, как он отобразит что-либо для пользователя. При нормальном ходе событий браузер резко останавливается и загружает ваш скрипт, запускает интерпретатор JavaScript и передает ему скрипт, а затем ждет, пока интерпретатор обработает скрипт (а затем jQuery наблюдает за ним различными способами. чтобы модель DOM была готова). (Я говорю «в обычном порядке», потому что некоторые браузеры поддерживают атрибутыasync
илиdefer
вscript
тегах.)Если вы включите свой
script
тег в конецbody
элемента, браузер не сделает всего этого, пока ваша страница в основном не будет отображаться для пользователя. Это сокращает время загрузки вашей страницы.Итак, чтобы получить наилучшее восприятие времени загрузки, поместите свой скрипт внизу страницы. (Это также рекомендация сотрудников Yahoo .) И если вы собираетесь это сделать, то в этом нет необходимости
ready
, хотя, конечно, вы можете, если хотите.Однако за это есть цена: вы должны быть уверены, что то, что видит пользователь, готово к взаимодействию. Перемещая время загрузки на более позднее, чем страница в основном отображается, вы увеличиваете вероятность того, что пользователь начнет взаимодействовать со страницей до загрузки вашего скрипта. Это один из контраргументов против размещения
script
тега в конце. Часто это не проблема, но вы должны посмотреть на свою страницу, чтобы узнать, есть ли это, и если да, то как вы хотите с этим бороться. (Вы можете поместить небольшой встроенныйscript
элемент в,head
который настраивает обработчик событий для всего документа, чтобы справиться с этим. Таким образом вы получите улучшенное время загрузки, но если они пытаются сделать что-то слишком рано, вы можете либо сказать им об этом, либо, лучше, поставить в очередь то, что они хотели сделать, и сделать это, когда ваш полный сценарий будет готов.)источник
Ваша страница будет загружаться медленнее из-за разброса
$(document).ready()
скриптов по всей модели DOM (а не в конце), потому что сначала требуется синхронная загрузка jQuery .$ = jQuery
. Таким образом, вы не можете использовать$
в своих скриптах без предварительной загрузки jQuery. Этот подход заставляет вас загружать jQuery в начале страницы, что останавливает загрузку вашей страницы до тех пор, пока jQuery не будет полностью загружен.Вы также не можете
async
загрузить jQuery, потому что во многих случаях ваши$(document).ready()
скрипты будут пытаться выполнить до того, как jQuery будет полностью асинхронно загружен, и вызовет ошибку, потому что, опять же,$
еще не определен.При этом есть способ обмануть систему. По сути, установка
$
равна функции, которая помещает$(document).ready()
функции в очередь / массив. Затем внизу страницы загрузите jQuery, затем выполните итерацию по очереди и выполните каждый из$(document).ready()
них за раз. Это позволяет вам отложить jQuery до нижней части страницы, но по-прежнему использовать$
его над ним в DOM. Я лично не проверял, насколько хорошо это работает, но теория верна. Идея существует уже некоторое время, но я очень и очень редко видел ее реализованной. Но идея кажется отличной:http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax
источник