Серверная оптимизация загружаемых изображений: WebP, AVIF, сжатие

Представьте: вы загружаете на сайт изображение 10 МБ, а посетитель с мобильным интернетом уходит, не дождавшись загрузки. Тяжёлые картинки — главная причина плохого LCP (Largest Contentful Paint) и высокого показателя отказов. Мы сталкивались с этим десятки раз: клиент жалуется на медленный сайт, а

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Серверная оптимизация загружаемых изображений: WebP, AVIF, сжатие
Средний
~2-3 дня

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

Часто задаваемые вопросы

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

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

Представьте: вы загружаете на сайт изображение 10 МБ, а посетитель с мобильным интернетом уходит, не дождавшись загрузки. Тяжёлые картинки — главная причина плохого LCP (Largest Contentful Paint) и высокого показателя отказов. Мы сталкивались с этим десятки раз: клиент жалуется на медленный сайт, а виноваты неоптимизированные JPEG с метаданными EXIF на 500 КБ каждый. Серверная оптимизация изображений решает эту проблему на корню: автоматическое сжатие с потерями и без, конвертация в современные форматы WebP и AVIF, динамическое изменение размера — всё это снижает объём передаваемых данных на 40–70% без потери качества. Оптимизация изображений напрямую влияет на Core Web Vitals, особенно LCP и CLS, что повышает позиции в поисковой выдаче. В нашей практике грамотный пайплайн уменьшил LCP с 4,2 с до 1,1 с для интернет-магазина с тысячами товаров. Согласно Wikipedia, WebP — формат изображений, обеспечивающий превосходное сжатие.

Как серверная оптимизация изображений ускоряет загрузку сайта?

При загрузке изображения на сервер запускается пайплайн: библиотека Sharp или Intervention Image изменяет размер до заданных максимальных ширин (400, 800, 1200, 1920 пикселей), конвертирует в WebP и AVIF, удаляет EXIF-данные. Затем сгенерированные файлы кешируются на CDN с длинным сроком жизни. Браузер получает маленький файл в поддерживаемом формате — страница грузится мгновенно. В отличие от клиентской оптимизации (сжатие через JavaScript), серверный подход не нагружает устройство пользователя и одинаково эффективен для любого трафика.

Почему стоит выбрать WebP и AVIF?

Формат Тип сжатия Среднее уменьшение Поддержка браузеров
JPEG С потерями 1x (базовый) 100%
WebP С потерями/без потерь 25-35% меньше JPEG 96%
AVIF С потерями/без потерь 50% меньше JPEG 85%

AVIF лучше по сжатию, WebP — по совместимости. Оптимальная стратегия — генерировать оба формата и передавать через <picture> с srcset.

Наш стек для серверной оптимизации

В Node.js проектах используем библиотеку Sharp — она обеспечивает высокую пропускную способность и минимальное потребление памяти. Для PHP-приложений применяем Intervention Image в связке с Imagick. Примеры кода реализованы ниже.

Node.js: Sharp pipeline

import sharp from 'sharp'; interface OptimizeOptions { maxWidth?: number; quality?: number; format?: 'webp' | 'avif' | 'jpeg'; } async function optimizeImage(inputBuffer: Buffer, options: OptimizeOptions = {}): Promise<Buffer> { const { maxWidth = 1920, quality = 80, format = 'webp' } = options; return sharp(inputBuffer) .resize(maxWidth, undefined, { withoutEnlargement: true, fit: 'inside', }) .toFormat(format, { quality, effort: 4, // баланс скорость/размер }) .withMetadata({ orientation: undefined }) // убрать EXIF rotation .toBuffer(); } // Middleware для lazy оптимизации app.get('/images/:key', async (req, res) => { const { key } = req.params; const { w, q = '80', f = 'webp' } = req.query; // Проверить кэш const cacheKey = `${key}:${w}:${q}:${f}`; const cached = await s3.getObject({ Key: `optimized/${cacheKey}.${f}` }).catch(() => null); if (cached) { return res.type(`image/${f}`).send(await streamToBuffer(cached.Body)); } // Получить оригинал const original = await s3.getObject({ Key: `originals/${key}` }); const buffer = await streamToBuffer(original.Body); // Оптимизировать const optimized = await optimizeImage(buffer, { maxWidth: w ? parseInt(w as string) : 1920, quality: parseInt(q as string), format: f as 'webp' | 'avif' | 'jpeg', }); // Сохранить в кэш await s3.putObject({ Key: `optimized/${cacheKey}.${f}`, Body: optimized, ContentType: `image/${f}`, CacheControl: 'public, max-age=31536000', }); res.type(`image/${f}`).send(optimized); }); 

PHP: оптимизация при загрузке

use Intervention\Image\Facades\Image; class ImageOptimizationService { const FORMATS = ['webp', 'avif']; const SIZES = [400, 800, 1200, 1920]; public function process(UploadedFile $file): array { $image = Image::make($file->getPathname()); // Убрать EXIF и повернуть по ориентации $image->orientate()->stripExif(); $paths = []; foreach (self::SIZES as $width) { if ($image->width() < $width) continue; $resized = clone $image; $resized->resize($width, null, fn($c) => $c->aspectRatio()->upsize(false)); foreach (self::FORMATS as $format) { $quality = $format === 'avif' ? 60 : 82; $key = "images/{$width}w/{$this->generateKey()}.{$format}"; Storage::disk('s3')->put( $key, $resized->encode($format, $quality)->__toString(), ['CacheControl' => 'public, max-age=31536000'] ); $paths[$format][$width] = $key; } } return $paths; } } 

HTML: responsive images с srcset

// Blade хелпер для отображения оптимизированных изображений function responsive_img(array $paths, string $alt, string $sizes = '100vw'): string { $avifSrcset = collect($paths['avif'] ?? [])->map(fn($path, $width) => Storage::disk('s3')->url($path) . " {$width}w" )->join(', '); $webpSrcset = collect($paths['webp'] ?? [])->map(fn($path, $width) => Storage::disk('s3')->url($path) . " {$width}w" )->join(', '); $fallback = Storage::disk('s3')->url(end($paths['webp'])); return <<<HTML <picture> <source type="image/avif" srcset="{$avifSrcset}" sizes="{$sizes}"> <source type="image/webp" srcset="{$webpSrcset}" sizes="{$sizes}"> <img src="{$fallback}" alt="{$alt}" loading="lazy" decoding="async"> </picture> HTML; } 

Обратите внимание на атрибут alt: он должен содержать ключевое слово, например «оптимизированное изображение товара», что также помогает SEO.

Nginx: конвертация WebP на лету

# Отдавать WebP если браузер поддерживает map $http_accept $webp_suffix { "~*webp" ".webp"; default ""; } server { location ~* \.(jpg|jpeg|png)$ { add_header Vary Accept; try_files $uri$webp_suffix $uri =404; expires 1y; add_header Cache-Control "public, immutable"; } } 

Процесс работы

  1. Анализ — аудит текущих изображений: средний размер, форматы, метаданные. Определяем точки роста.
  2. Проектирование пайплайна — выбираем стратегию: on‑the‑fly (Nginx + ImageMagick) или pre‑process при загрузке. Проектируем систему кеширования.
  3. Реализация — пишем код оптимизации, настраиваем обработчик загрузки, добавляем srcset для responsive images.
  4. Тестирование — проверяем визуальное качество, метрики Core Web Vitals, скорость отдачи. Используем Lighthouse и PageSpeed Insights.
  5. Деплой — разворачиваем на сервере, подключаем CDN (Cloudflare, AWS CloudFront), настраиваем мониторинг.

Что входит в работу

  • Интеграция пайплайна оптимизации (Sharp/Intervention) в ваш бэкенд.
  • Генерация нескольких размеров (400, 800, 1200, 1920 px) для responsive images.
  • Конвертация в WebP и AVIF с оптимальным качеством.
  • Стриппинг метаданных (EXIF) для дополнительной экономии.
  • Настройка кеширования через CDN с long‑lived Cache-Control.
  • Документация по использованию хелперов (Blade, Twig, JSX).
  • Поддержка после внедрения — 14 дней мониторинга.

Чек-лист для оценки текущего пайплайна:

  • использование современных форматов (WebP/AVIF);
  • применение стриппинга метаданных;
  • генерация разных размеров для responsive;
  • настройка кеширования на CDN;
  • использование lazy loading и async decoding.

Сроки реализации

Компонент Ориентировочный срок
Базовая интеграция Sharp при загрузке 2–3 дня
On‑the‑fly конвертация через Nginx +1–2 дня
Полный пайплайн с responsive srcset и CDN 4–5 дней

Стоимость рассчитывается индивидуально под ваш проект — зависит от стека, количества точек загрузки и требований к кешированию. При среднем объёме трафика экономия может быть существенной. Свяжитесь с нами для оценки, и мы предложим оптимальное решение.

Закажите реализацию серверной оптимизации изображений под ключ — ваш сайт станет значительно быстрее. За 7+ лет работы мы оптимизировали изображения для более чем 50 проектов — от небольших блогов до высоконагруженных интернет-магазинов. Гарантируем снижение размера картинок минимум на 40% при сохранении качества.