Оптимизация изображений сайта (WebP, AVIF, lazy loading)

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Оптимизация изображений сайта (WebP, AVIF, lazy loading)
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Оптимизация изображений: WebP, AVIF, lazy loading

Изображения — 50–70% веса средней веб-страницы. Конвертация в WebP даёт 25–35% экономии по сравнению с JPEG; AVIF — ещё 20% сверху. Lazy loading экономит трафик и ускоряет загрузку первого экрана.

Форматы: JPEG → WebP → AVIF

Формат Поддержка браузеров Экономия vs JPEG
JPEG 100%
WebP 96% 25–35%
AVIF 88% 40–60%
WebP (lossless) 96% 20–30% vs PNG

Элемент <picture> для прогрессивного fallback:

<picture>
    <source type="image/avif"
            srcset="/images/product-400.avif 400w,
                    /images/product-800.avif 800w,
                    /images/product-1200.avif 1200w"
            sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 400px">
    <source type="image/webp"
            srcset="/images/product-400.webp 400w,
                    /images/product-800.webp 800w,
                    /images/product-1200.webp 1200w"
            sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 400px">
    <img src="/images/product-800.jpg"
         width="800" height="800"
         alt="Название продукта"
         loading="lazy"
         decoding="async">
</picture>

Генерация конвертированных форматов в Laravel

// Использование spatie/laravel-medialibrary с конверсиями
class Product extends Model
{
    use InteractsWithMedia;

    public function registerMediaConversions(?Media $media = null): void
    {
        $this->addMediaConversion('thumb')
            ->width(400)->height(400)
            ->format('webp')
            ->quality(80)
            ->performOnCollections('images');

        $this->addMediaConversion('medium')
            ->width(800)->height(800)
            ->format('webp')
            ->quality(82)
            ->performOnCollections('images');

        $this->addMediaConversion('avif-medium')
            ->width(800)->height(800)
            ->format('avif')
            ->quality(65)
            ->performOnCollections('images');
    }
}
// Blade-компонент для adaptive image
// resources/views/components/image.blade.php
@props(['media', 'alt', 'sizes' => '100vw', 'loading' => 'lazy'])

<picture>
    @if ($media->hasGeneratedConversion('avif-medium'))
    <source type="image/avif"
            srcset="{{ $media->getUrl('avif-medium') }}"
            sizes="{{ $sizes }}">
    @endif
    <source type="image/webp"
            srcset="{{ $media->getUrl('medium') }}"
            sizes="{{ $sizes }}">
    <img src="{{ $media->getUrl() }}"
         width="{{ $media->getCustomProperty('width') }}"
         height="{{ $media->getCustomProperty('height') }}"
         alt="{{ $alt }}"
         loading="{{ $loading }}"
         decoding="async">
</picture>

Nginx: автоматическая отдача WebP

Если нет возможности генерировать во время загрузки — конвертировать заранее и отдавать через Nginx:

map $http_accept $webp_suffix {
    default "";
    "~*webp" ".webp";
}

location ~* \.(jpg|jpeg|png)$ {
    add_header Vary Accept;
    try_files $uri$webp_suffix $uri =404;
    expires 30d;
}

Lazy loading

<!-- Нативный lazy loading -->
<img src="photo.webp" loading="lazy" alt="...">

<!-- LCP-изображение — НИКОГДА не lazy -->
<img src="hero.webp" loading="eager" fetchpriority="high" alt="...">

Нативный lazy loading поддерживается во всех современных браузерах. Изображения загружаются когда входят в viewport с небольшим запасом (обычно 1200px до появления).

Intersection Observer для кастомного lazy loading

// Для background-image и нестандартных случаев
function lazyLoadBackgrounds() {
    const observer = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                const el = entry.target as HTMLElement;
                el.style.backgroundImage = `url(${el.dataset.bg})`;
                el.removeAttribute('data-bg');
                observer.unobserve(el);
            }
        });
    }, { rootMargin: '200px' });

    document.querySelectorAll('[data-bg]').forEach(el => observer.observe(el));
}

Оптимизация качества

Типичные рекомендации по quality:

Тип изображения WebP quality AVIF quality
Фото товара 82–85 65–70
Hero-изображение 85–88 70–75
Иконки, логотипы Используйте SVG
Скриншоты, UI 90 75

Blur placeholder (LQIP)

// Генерация tiny placeholder при загрузке
use Intervention\Image\ImageManager;

$manager = ImageManager::gd();
$image = $manager->read($file->path());

$lqip = $image->scale(width: 20)
    ->toJpeg(quality: 30)
    ->toDataUri(); // base64 data URI

// Сохранить в БД, использовать как placeholder
<img src="{{ $lqip }}"
     data-src="/images/product-full.webp"
     style="filter: blur(10px); transition: filter 0.3s"
     onload="this.style.filter='none'; this.src=this.dataset.src"
     alt="...">

Срок оптимизации: 1–2 дня для настройки конвертации и медиабиблиотеки.