<script defer> и $(document).ready
Согласно http://caniuse.com/script-defer, большинство браузеров поддерживают атрибут script
tag defer
.
Я хотел бы знать, выполняются ли скрипты, указанные <script defer src="...">
до или после jQuery $(document).ready()
? Являются ли основные, современные браузеры (Chrome, Firefox, IE и т.д.) Согласованными в порядке выполнения или варьируются?
Ответы
Ответ 1
Основываясь на этом скрипке, я должен сказать, что jQuery $(document).ready()
выполняет после a script с defer
. Я тестировал его с помощью Firefox и Chrome, и оба они имели одинаковое поведение независимо от последовательности скриптов.
Я предполагаю, что поведение в других браузерах может измениться в зависимости от их реализации, поэтому оно всегда неопределенно.
EDIT. Как оказалось, атрибут defer
должен использоваться с внешним файлом javascript. Я редактировал скрипт, чтобы показать это, по-видимому, с теми же результатами.
Обновлена скрипка здесь: http://jsfiddle.net/RNEZH/15/
Ответ 2
Атрибут defer имеет хорошую запись и анализ. Также См. комментарии к сообщению для дополнительной информации о том, как defer
был переопределен в HTML5.
Мое заключение: defer
слишком зависит от браузера, чтобы рассчитывать. Поэтому используйте технику подготовки документа jQuery.
Другими словами, важной причиной для jQuery является ограничение браузеров. Отсрочка - это еще одна такая несогласованность, которой следует избегать для хорошо написанных страниц.
Ответ 3
Просто script
должен быть выполнен до $(document).ready()
, используется ли defer
или нет, и почти все основные браузеры поддержка defer
.
Но для обеспечения безопасности я рекомендую использовать как $(document).ready()
, так и defer
.
Так почему defer
? Поскольку он помогает быстро появляться на странице (поскольку внешний script загружается параллельно) и действительно важным фактором в инструменте скорости страницы Google, можно найти хорошую деталь здесь http://code.google.com/speed/page-speed/docs/payload.html#DeferLoadingJS