Диагностика проблемы медленной загрузки из-за изображений
Часто сайты на WordPress тормозят из-за неоптимизированных изображений — они занимают много места, загружаются полностью сразу, не используют современные форматы или не ленивы. Чтобы понять, насколько это ваша проблема, используйте инструменты диагностики:
- Google PageSpeed Insights — обратите внимание на рекомендации по изображениям;
- GTmetrix — оцените размер и время загрузки изображений;
- Chrome DevTools (Network) — смотрите время загрузки и размеры файлов;
- WP-CLI команда
wp media list --format=csvдля оценки размеров медиафайлов.
Если изображения занимают более 50% трафика страницы, стоит оптимизировать их загрузку.
Пошаговое решение: внедрение ленивой загрузки и WebP формата
1. Включение нативной ленивой загрузки в WordPress
Начиная с версии 5.5, WordPress поддерживает атрибут loading="lazy" для тегов <img>. Чтобы проверить, включена ли ленивость, откройте исходный код страницы и убедитесь, что у изображений есть loading="lazy".
Если этого нет, возможно тема или плагины переопределяют вывод. Для принудительного добавления используйте фильтр:
add_filter('wp_lazy_loading_enabled', function($default, $image, $context) {
return true; // Всегда включаем lazy loading
}, 10, 3);2. Конвертация и использование формата WebP
WebP позволяет уменьшить размер изображений без потери качества. Для этого можно использовать плагин, например Clearfy Pro с функцией WebP или настроить конвертацию вручную.
Пример конвертации в WebP с помощью PHP и GD:
function convert_image_to_webp($source, $destination) {
$info = getimagesize($source);
if ($info['mime'] == 'image/jpeg') {
$image = imagecreatefromjpeg($source);
} elseif ($info['mime'] == 'image/png') {
$image = imagecreatefrompng($source);
} else {
return false; // Формат не поддерживается
}
imagewebp($image, $destination, 80); // Качество 80
imagedestroy($image);
return true;
}Этот скрипт можно использовать для пакетной конвертации через WP-CLI или при загрузке изображений.
3. Реализация отложенной загрузки фоновых изображений через Intersection Observer
Ленивая загрузка стандартных <img> работает, но фоновые изображения в CSS загружаются сразу. Для них используйте JavaScript:
document.addEventListener('DOMContentLoaded', function() {
let lazyBackgrounds = [].slice.call(document.querySelectorAll('.lazy-background'));
if ('IntersectionObserver' in window) {
let lazyBackgroundObserver = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
entry.target.style.backgroundImage = 'url(' + entry.target.dataset.bg + ')';
lazyBackgroundObserver.unobserve(entry.target);
}
});
});
lazyBackgrounds.forEach(function(bg) {
lazyBackgroundObserver.observe(bg);
});
} else {
// fallback: загрузить все сразу
lazyBackgrounds.forEach(function(bg) {
bg.style.backgroundImage = 'url(' + bg.dataset.bg + ')';
});
}
});Для этого нужно разметить элементы так:
<div class="lazy-background" data-bg="/path/to/image.jpg"></div>Проверка результата после внедрения
- Загрузите страницу в режиме инкогнито браузера;
- Откройте Chrome DevTools → Network, отфильтруйте изображения. Убедитесь, что часть изображений загружаются только при скролле;
- Проверьте, что WebP версии изображений подгружаются в браузерах, которые их поддерживают (Chrome, Edge, Firefox);
- Снова проверьте Google PageSpeed Insights — должно быть улучшение по пунктам "Оптимизировать изображения" и "Отложить загрузку offscreen-элементов".
Частые ошибки и как их исправить
- Изображения не подгружаются лениво: тема или плагины переопределяют вывод
<img>, отключите их или добавьте фильтрwp_lazy_loading_enabledкак показано выше; - WebP не отображается: сервер не поддерживает MIME-тип
image/webp, настройте .htaccess или сервер (Nginx) для отдачи правильного типа; - Фоновые изображения грузятся сразу: забыт класс
lazy-backgroundили некорректно указан атрибутdata-bg; - Проблемы с кэшированием: кеш-браузера или плагина не обновляет новые версии изображений — очистите кеш;
- Падение качества WebP: при конвертации стоит использовать качество 75-85, чтобы избежать артефактов.
Практические советы по безопасности и производительности
- Используйте CDN с поддержкой WebP и lazy loading для максимального ускорения;
- Не конвертируйте слишком маленькие изображения — это может увеличить размер;
- Регулярно чистите медиатеку от неиспользуемых изображений с помощью плагинов типа Media Cleaner;
- Используйте
srcsetиsizesдля адаптивной загрузки изображений под разные экраны; - Включайте GZIP или Brotli сжатие на сервере для уменьшения размера передаваемых файлов;
- Используйте плагин Clearfy Pro для комплексной очистки и оптимизации сайта, включая улучшение SEO и удаление дублей, которые влияют на производительность.
Сравнение методов оптимизации изображений
| Метод | Плюсы | Минусы | Пример реализации |
|---|---|---|---|
| Нативная ленивость (loading="lazy") | Простая реализация, нативная поддержка браузерами | Не работает в старых браузерах, не для фоновых изображений | Фильтр wp_lazy_loading_enabled |
| JavaScript Intersection Observer | Работает для фоновых изображений, гибко | Зависит от JS, сложнее внедрять | JS код с классом lazy-background |
| WebP конвертация | Значительное уменьшение размера изображений | Требует поддержки сервера, конвертации | PHP функция imagewebp() или плагин Clearfy Pro |