Включение файла JavaScript. Разве я не должен ссылаться в <head>?
Я смотрю Дугласа Крокфордса " Теория DOM", и он упомянул, что расположение моих тегов скрипта может сильно повлиять на время загрузки моих приложений. Кроме того, он утверждает, что тег сценария должен быть включен как можно ближе к нижней части тела документа.
Это точно?
ИЛИ ЖЕ
Это видео устарело? (который он фактически находит в качестве причины, по которой он не читал лекцию о DOM раньше).
5 ответов
Google соглашается с Крокфордом:
- Отложить загрузку JavaScript
- Это также одна из причин, по которым трекеры Google Analytics должны располагаться внизу.
Yahoo! также:
- Лучшие практики для ускорения вашего сайта (раздел "Положите сценарии внизу")
И другие пользователи SO также соглашаются:
Файлы, включенные в заголовок, загружаются еще до начала загрузки остальной части страницы. Рекомендуется загружать ненужные файлы как можно ближе к нижней части страницы, чтобы остальная часть страницы могла быть загружена заранее.
Есть несколько библиотек JS (таких как LABjs), которые вы можете загрузить в заголовок. Затем они позволяют асинхронно загружать все остальные ваши активы JS и обеспечивают обратный вызов, чтобы остальная часть кода могла выполняться, когда вы знаете, что ваши ресурсы JS были загружены.
Вы также можете использовать http://labjs.com/.
Как указано на странице проекта:
LABjs (загрузка и блокировка JavaScript) - это проект с открытым исходным кодом (лицензия MIT), поддерживаемый Getify Solutions. Основная цель LABjs - быть универсальным загрузчиком JavaScript по требованию, способным загружать любой ресурс JavaScript из любого места на любую страницу в любое время. Загрузка ваших сценариев с помощью LABjs уменьшает блокировку ресурсов во время загрузки страницы, что является простым и эффективным способом оптимизации производительности вашего сайта.
LABjs по умолчанию будет загружать (и выполнять) все сценарии параллельно, насколько позволяет браузер. Однако вы можете легко указать, какие сценарии имеют зависимости порядка выполнения, и LABjs обеспечит правильный порядок выполнения. Это делает LABjs безопасным для использования практически для любого ресурса JavaScript, независимо от того, управляете вы им или размещаете его, и является ли он автономным или частью большого дерева зависимостей ресурсов.
Использование LABjs заменит все эти уродливые "супы тегов" - то есть все теги, которые обычно появляются в или в конце вашей HTML-страницы. API является выразительным и связующим, позволяя вам указать, какие скрипты загружать и когда ждать ("блок"), если необходимо, для выполнения, прежде чем продолжить дальнейшее выполнение. API также легко позволяет выполнять связывание при выполнении встроенного кода (например, встроенные теги).
LABjs теперь имеет привилегию извлекать выгоду из сотрудничества со Стивом Соудерсом и стремится стать единственным лучшим решением для оптимизированной, гибкой и общей загрузки скриптов.
Я также слышал, что JavaScript должен быть включен в конце страницы, чтобы "надеяться", что DOM загрузится. Я полагаю, что прочитал это в документации Yahoo некоторое время назад.
Ну, это правильно. Если вы не используете что-то вроде head.js, которое загружает ваши файлы javascript параллельно. Да, и некоторые сценарии должны быть перед контентом. Например, скрипт html5-shiv.