Требуется ли $ (document) .ready?


111

Я видел этот вопрос в stackoverflow, но не думаю, что на него вообще есть ответ.

Является ли $(document).readyнеобходимым?

Я связываю все свои javascripts внизу страницы, поэтому теоретически они все запускаются после того, как документ будет готов.


3
Старым браузерам может не понравиться параллельная загрузка, которую используют новые браузеры. Это основная причина, по которой ваши скрипты размещаются внизу. В частности, он позволяет сначала отображать HTML и CSS в старых браузерах. На этом этапе у вас есть выбор, как вы хотите достичь ощущения загрузки DOM. Два популярных метода запуска js - это window.onload и $ (document) .ready (в сочетании с jQuery). Есть и другие варианты и очевидные недостатки window.onload, которые легко найти. Дело в том, что $ (document) .ready чаще всего работает и прост в использовании.
BradChesney79,

Ответы:


125

Является ли $(document).readyнеобходимым?

нет

если вы разместили все свои скрипты прямо перед </body>закрывающим тегом, вы сделали то же самое.

Кроме того, если скрипту не нужен доступ к DOM, не имеет значения, куда он загружен, за исключением возможных зависимостей от других скриптов.

Для многих CMS у вас нет особого выбора, где загружать скрипты, поэтому для модульного кода рекомендуется использовать document.readyсобытие. Вы действительно хотите вернуться и отладить старый код, если вы повторно используете его в другом месте?

не по теме:

В качестве побочного примечания: вы должны использовать jQuery(function($){...});вместо, $(document).ready(function(){...});поскольку он заставляет псевдоним $.


Вы уверены, что это "то же самое"? У меня создалось впечатление, что ваш css (или другой код, загруженный параллельно с основным html), возможно, еще не полностью проанализирован.
Zach Lysobey 01

6
@ZachL, документ может быть готов до того, как CSS будет полностью проанализирован. document.ready - это не то же самое, что onloadсобытие, когда загрузка изображений и других внешних ресурсов завершена.
zzzzBov 01

Спасибо за разъяснения.
Zach Lysobey 01

5
Это «нет» просто стоило мне 3 часов работы ... только убедитесь, что вы не перепутали </body> с <body> :)
teejay

1
Я не обязательно согласен с принудительным использованием псевдонима, особенно если его noConflict()нужно использовать по какой-то причине.
Джей Бланшар

22

Нет, если ваш javascript является последним перед закрытием, вам не нужно добавлять эти теги.

В качестве побочного примечания, сокращение для $ (document) .ready - это код ниже.

$(function() {
// do something on document ready
});

Этот вопрос может быть хорошим. Вы это читали? jQuery: зачем использовать document.ready, если внешний JS внизу страницы?


6
По сути, вопрос заключается в том, «Нужен ли мне вообще готовый документ, когда я помещаю свои скрипты в нижнюю часть тела?», А не «Есть ли способ написания с сокращением $(document).ready()».
nnnnnn

4

Нет, в этом нет необходимости, если вы знаете, что у вас нет каких-либо отложенных вещей, и в большинстве случаев вы будете знать, разработали ли вы то, над чем работаете сверху вниз.

- Вы не знаете, когда вводите чужой код без тщательного аудита.

Итак, спросите себя, используете ли вы фреймворк или редактор, который помогает вам со структурой? Вы вводите чужой код и не удосужились прочитать каждый файл? Готовы ли вы пройти через матрицу операционной системы, браузера и версии браузера для тестирования вашего кода? Вам нужно выжать из вашего кода каждую унцию скорости?

document.ready () делает многие из этих вопросов неактуальными. document.ready () был разработан, чтобы облегчить вам жизнь. Это дает небольшой (и, осмелюсь сказать, приемлемый) удар по производительности.


Я просто кое-что увидел - одно из ваших правок было отклонено, но мне оно кажется нормальным. Возможно, вы захотите отправить его повторно: stackoverflow.com/review/suggested-edits/3224385
Qantas 94 Heavy

1

Я видел ссылки / сообщения в блоге в Интернете об использовании jquery document.ready. На мой взгляд, оба варианта - использовать его или поместить весь ваш javascript внизу страницы. А теперь вопрос, что лучше? Это просто вопрос стиля программирования.


0

Нет, в этом нет необходимости. Вы можете поместить тег скрипта прямо перед закрывающим тегом тела или, если вы поддерживаете IE9 +, вы можете использовать собственный JS.

<script>alert('DOM Loaded!');</script>
</body>

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.