ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Скрипты в HTML: в head или body для лучшей функциональности

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если у вас есть скрипты, которые не нуждаются в немедленном доступе к DOM, используйте <script defer> внутри тега <head>. Они будут загружаться асинхронно во время просмотра страницы и запускаться после её разбора, что не замедлит скорость её работы.

А вот если ваши скрипты взаимодействуют с DOM, поместите <script> непосредственно перед закрывающим тегом </body>. Это обеспечит их подключение после полной загрузки HTML и гарантирует корректность работы с DOM.

Пример:

HTML
Скопировать код
<head>
    <!-- Подходяще для скриптов, не требующих взаимодействия с DOM -->
    <script src="non-dom-script.js" defer></script>
</head>
<body>
    <!-- Ваш контент -->

    <!-- Для скриптов, взаимодействующих с DOM -->
    <script src="dom-script.js"></script>
</body>
Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Где и когда размещать скрипты?

Выбирая место для скрипта, нужно оценить его требования, производительность страницы и взаимодействие пользователя. Неблокирующие скрипты со свойствами async или defer предпочтительнее вставить в <head>.

Скрипты и их загрузка: ищем баланс

Задача стоит в том, чтобы обеспечить скоростную загрузку страницы, не ущемляя при этом функциональности скриптов. Скрипты, размещённые в нижней части <body>, ускоряют отображение HTML, но основные, от которых зависит работа страницы, следует разместить в <head> со свойством defer.

Организация кода: распределение скриптов

Держите код в порядке: группируйте скрипты внутри <head> или разделяйте их на разные файлы. Это упрощает их поддержку и предотвращает хаотичное внедрение в HTML.

Скрипты и DOM: вовремя выполнения

Применяйте функцию document.ready() из jQuery или событие DOMContentLoaded для того, чтобы гарантировать правильное взаимодействие скриптов с DOM после полного его разбора.

Визуализация

Представление скриптов в <head> и <body> можно аналогично сравнить с подготовкой автомобиля к поездке:

Markdown
Скопировать код
🚚🔧 Скрипт в `<head>`: Это подобие подготовки инструментов перед отъездом.
     * Инструменты запакованы, а отъезд временно откладывается.

🚚💨 Скрипт в конце `<body>`: Это подразумевает, что багаж упаковывается заранее, а инструменты наоборот — в последний момент.
     * Багаж отправляется вперёд, а инструменты берутся только когда они нужны.

Подробнее о размещении: стратегии и инструменты

Сохранение макета: стратегия с помощью скрытого div

Используйте скрытый div, чтобы предотвратить сдвиги макета при загрузке скриптов, скрывая их до момента их активного использования.

Внешние скрипты: регулирование кэширования

Внешние скрипты дадут вам возможность оптимизировать кэширование, что увеличит скорость загрузки страницы при её повторном посещении.

Общий подход: функциональность против производительности

Необходимо найти золотую середину между функциональностью и производительностью. Встроенные скрипты увеличивают скорость, но могут замедлить общую загрузку страницы.

Defer и Async: динамичное сочетание

Атрибут Async позволяет запустить скрипты сразу после их загрузки, а defer ожидает окончания разбора HTML, оптимизируя при этом общую загрузку страницы.

Совет для энтузиастов jQuery: небольшой совет

Подключайте jQuery в <head>, чтобы в полной мере использовать все её функции в последующих скриптах.

Полезные материалы

  1. Тег script HTML — подробная информация о применении тега <script>.
  2. bitsofcode — статья о месте наиболее предпочтительном для помещения JavaScript.
  3. Основные веб-показатели Google — как скрипты влияют на ключевые показатели сайта.
  4. Оптимизация доставки CSS — методы, помогающие оптимизировать подключение CSS и скриптов.
  5. <script>: Элемент Script — полное руководство по элементу <script>.
  6. Эффективная загрузка JavaScript с помощью defer и async — особенности использования атрибутов async и defer.
  7. javascript – Где должны располагаться теги <script>? — дискуссия о лучших практиках расположения тегов <script>.