<MyRusakov.ru />

WordPress 6 с Нуля до Гуру

WordPress 6 с Нуля до Гуру

Этот курс научит Вас созданию самых разных сайтов на самой популярной в мире CMS - WordPress. Вы увидите установку и настройку локального сервера, разбор каждой настройки, каждой кнопки и каждого пункта меню в панели WordPress.

Также Вы получите и всю практику, поскольку прямо в курсе с нуля создаётся полноценный Интернет-магазин, который затем публикуется в Интернете. И всё это прямо на Ваших глазах.

Помимо уроков к курсу идут упражнения для закрепления материала.

И, наконец, к курсу идёт ценнейший Бонус по тому, как используя ChatGPT и создавая контент для сайта, можно выйти на пассивный доход. Вы наглядно увидите, как зарегистрироваться в ChatGPT (в том числе, и если Вы из России), как правильно выбрать тему для сайта, как правильно генерировать статьи для него(чтобы они индексировались поисковыми системами) и как правильно монетизировать трафик на сайте.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

HTML5: ленивая загрузка изображений и iframe — loading, decoding и fetchpriority на практике

HTML5: ленивая загрузка изображений и iframe — loading, decoding и fetchpriority на практике

Запрос «Ленивая загрузка изображений в HTML5» стабильно популярен: всем нужен быстрый сайт без сложных настроек. HTML5 дал нам нативный инструмент — атрибуты loading, decoding и fetchpriority, которые помогают управлять загрузкой медиа почти без JavaScript. Разберёмся, как применять их правильно, не ломая LCP и не вызывая CLS.

Что такое ленивая загрузка и зачем она нужна

Ленивая загрузка откладывает загрузку ресурсов, которые пользователь ещё не видит (ниже «сгиба»), до момента, когда они попадают в область просмотра. Это уменьшает трафик, ускоряет первичную отрисовку и помогает показателям Core Web Vitals — особенно FCP и TBT. Но важно не «ленизировать» критические изображения, влияющие на LCP.

Быстрый старт: один атрибут

Минимально рабочий пример ленивой загрузки изображения в HTML5:

<img
  src="/images/gallery/photo-01.jpg"
  alt="Интерьер кофейни"
  width="1200"
  height="800"
  loading="lazy"
  decoding="async"
/>

Пояснения:

  • loading="lazy" — откладывает загрузку, пока элемент не приблизится к видимой области.
  • decoding="async" — браузер декодирует изображение асинхронно, не блокируя отрисовку.
  • width/height — резервируют место и предотвращают CLS (скачки верстки). Указывайте реальные размеры или соотношение сторон.

Главные (hero) изображения: не ленизируйте, помогайте браузеру

Изображение, формирующее LCP (крупнейший элемент), нельзя грузить лениво. Наоборот, дайте браузеру понять, что оно важно:

<img
  src="/images/hero.jpg"
  alt="Главный баннер — весенняя коллекция"
  width="1600"
  height="900"
  fetchpriority="high"
  decoding="async"
  style="max-width:100%;height:auto;"
/>
  • fetchpriority="high" — подсказывает, что ресурс критичен и его нужно запросить раньше других изображений.
  • decoding="async" обычно ускоряет отрисовку; но тестируйте: иногда дефолтный режим подходит не хуже.
  • Никакого loading="lazy" для hero!

Ленивая загрузка iframe

Встроенные карты, видео и виджеты часто «тяжелее» картинок. Нативный loading="lazy" работает и для iframe:

<iframe
  src="https://www.youtube.com/embed/VIDEO_ID"
  title="Видеообзор"
  loading="lazy"
  width="560" height="315"
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
  referrerpolicy="strict-origin-when-cross-origin"
  allowfullscreen
></iframe>

Совет: пока iframe не виден, показывайте лёгкий превью-плейсхолдер (постер-картинку). Это снижает блокировку потока и экономит запросы.

Поддержка и fallback на JS (по необходимости)

Поддержка loading="lazy" сегодня есть в современных браузерах. Если всё же нужен запасной вариант, можно добавить небольшой JS, который подменит data-src на src при попадании элемента в область просмотра.

<img
  data-src="/images/large-01.jpg"
  alt="Галерея"
  width="1200" height="800"
  class="js-lazy"
/>
<script>
  (function(){
    const nativelySupported = 'loading' in HTMLImageElement.prototype;
    if (nativelySupported) {
      document.querySelectorAll('img[js-lazy], img.js-lazy').forEach(img => {
        img.setAttribute('loading', 'lazy');
        if (img.dataset.src) img.src = img.dataset.src;
      });
      return;
    }
    const imgs = document.querySelectorAll('img[js-lazy], img.js-lazy');
    if ('IntersectionObserver' in window) {
      const io = new IntersectionObserver((entries, obs) => {
        entries.forEach(e => {
          if (e.isIntersecting) {
            const img = e.target;
            if (img.dataset.src) img.src = img.dataset.src;
            obs.unobserve(img);
          }
        });
      }, { rootMargin: '200px' });
      imgs.forEach(img => io.observe(img));
    } else {
      // Простейший бэкап без IO: прогружаем сразу
      imgs.forEach(img => { if (img.dataset.src) img.src = img.dataset.src; });
    }
  })();
</script>

Этот подход пригодится для очень старых браузеров. В большинстве проектов сегодня хватает одного лишь loading="lazy".

Чек-лист лучших практик

  • Указывайте width и height у изображений — это устраняет CLS.
  • Не ленизируйте контент выше «сгиба» (включая логотип, главное меню и LCP-изображение).
  • Для hero применяйте fetchpriority="high"; не злоупотребляйте им для галерей.
  • decoding="async" обычно хорош по умолчанию; сравните метрики с/без него.
  • Иконки и мелкие декоративные изображения лучше инлайнить как SVG или спрайты, а не ленизировать.
  • Для iframe используйте loading="lazy" и показывайте лёгкий постер до загрузки.
  • Тестируйте на реальных устройствах: иногда агрессивная ленивая загрузка ухудшает UX при быстрых скроллах.

Как проверить эффект

  • Запустите Lighthouse в Chrome DevTools до и после внедрения — оцените LCP, CLS, TBT и «Оптимизация изображений».
  • Смотрите вкладку Network: уменьшилось ли число и «вес» запросов при первом экране?
  • Во вкладке Performance проверьте, не стали ли длиннее основные задачи (Long Tasks) из‑за лишнего JS-фоллбэка.

Типичные ошибки и как их избежать

  • Ленизируют LCP-изображение. Решение: убрать loading="lazy", добавить fetchpriority="high".
  • Нет размеров у картинок. Решение: проставить width и height или aspect-ratio в CSS, чтобы не было скачков.
  • Ленивая загрузка мелких иконок. Часто бессмысленно: сетевые издержки больше выигрыша.
  • Отсутствует alt. Это плохо для доступности и поисковых систем; всегда пишите осмысленный alt для контентных изображений.
  • Слишком ранняя инициализация тяжёлого JS-фоллбэка. Если используете JS, держите код минимальным и отложенным.

Мини-шаблон для страницы с героем и галереей

<!-- Hero: важное изображение без lazy -->
<img
  src="/images/hero.jpg"
  alt="Весенняя коллекция"
  width="1600" height="900"
  fetchpriority="high"
  decoding="async"
  style="display:block;max-width:100%;height:auto;"
/>

<!-- Галерея ниже: lazy -->
<section class="gallery" aria-label="Фотогалерея">
  <img src="/images/g1.jpg" alt="Фото 1" width="1200" height="800" loading="lazy" decoding="async"/>
  <img src="/images/g2.jpg" alt="Фото 2" width="1200" height="800" loading="lazy" decoding="async"/>
  <img src="/images/g3.jpg" alt="Фото 3" width="1200" height="800" loading="lazy" decoding="async"/>
</section>

<!-- Встроенное видео ниже: lazy iframe -->
<iframe
  src="https://www.youtube.com/embed/VIDEO_ID"
  title="Видеообзор коллекции"
  width="560" height="315"
  loading="lazy"
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
  referrerpolicy="strict-origin-when-cross-origin"
  allowfullscreen
></iframe>

Итоги

Для большинства проектов достаточно: не ленизировать LCP-изображение, добавить ему fetchpriority="high", а для всего ниже «сгиба» — loading="lazy" и decoding="async". Не забывайте про размеры изображений и проверку метрик. Такой набор даёт быстрый и стабильный прирост производительности без сложных инструментов.

Хотите системно прокачать вёрстку и научиться уверенно работать с производительностью на реальных макетах? Загляните в практический курс «Вёрстка сайта с нуля 2.0 — хочу прокачать навыки на практике».

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.