Устраните слишком большие изображения и ресурсы, чтобы ускорить медленные страницы
Устраните слишком большие изображения и ресурсы, чтобы сократить время загрузки: найдите тяжёлые бандлы, сожмите изображения, используйте адаптивные размеры и настройте разумные заголовки кэширования.

Почему медленные страницы обычно связаны с слишком большими изображениями и ресурсами
Вес страницы — это количество байт, которые браузеру нужно скачать, прежде чем страница станет пригодной для использования. Сюда входят изображения, шрифты, видео, JavaScript (JS), CSS и сторонние скрипты. Чем тяжелее страница, тем дольше люди смотрят на пустой экран, особенно на мобильных устройствах.
Чаще всего виноваты слишком большие изображения — их легко пропустить. Главное изображение (hero) шириной 4000px может выглядеть великолепно, но если оно показывается в блоке шириной 1200px, вы платите за пиксели, которых никто не увидит. На мобильных устройствах это проявляется сразу: медленные сети, высокая латентность и слабее процессоры превращают большие файлы в задержку первого отображения и «рывистую» прокрутку.
Крупные файлы JS и CSS замедляют по‑другому. Даже после загрузки браузеру нужно разобрать и выполнить JS, а часто и обработать CSS перед тем, как отрисовать страницу. Поэтому страница может «скачаться быстро», но при этом казаться зависшей.
«На моём ноутбуке всё нормально» — это ловушка. На ноутбуках обычно быстрый Wi‑Fi, сильный CPU и горячие кэши. Реальные посетители могут быть на бюджетном телефоне по 4G с пустым кэшем.
Когда вы уменьшаете вес страницы, держите цель простой:
- Скачать меньше байт до первого отображения
- Сделать меньше запросов (каждый запрос добавляет накладные расходы)
- Избегать JS и CSS, блокирующих рендеринг
- Сделать повторные посещения быстрее за счёт кэша
Если сайт быстро собрали с помощью AI‑инструментов и производительность упала, типичная картина: несжатые изображения и огромные бандлы, которые никогда не проверяли на реальных устройствах.
Найдите самых больших нарушителей за 10 минут
Начните с того, чтобы выяснить, что действительно тяжело на странице. Догадки тратят время: одно гигантское изображение или один раздутый скрипт могут перевесить всё остальное.
Откройте страницу в обычном окне браузера, затем откройте DevTools и перейдите на вкладку Network. Обновите страницу с открытой вкладкой Network, чтобы поймать все запросы.
Быстрая рутина, которая работает на большинстве сайтов:
- Отсортируйте запросы по Size (или Transferred) и просмотрите верхние позиции.
- Нажмите на самые большие изображения и сравните их размер файла с тем, каким они выглядят на экране.
- Следите за повторяющимися ресурсами (одна и та же иконка, фон или шрифт скачивается несколько раз).
- Отметьте одиночный большой JS или CSS‑файл, который выделяется.
- Запишите топ‑5 самых тяжёлых запросов и их тип (изображение, JS, CSS, шрифт).
При инспекции изображения обращайте внимание на несоответствия: фото 4000x3000, показанное как миниатюра 400px, — явный признак.
Также смотрите на «смерть от тысячи порезов»: десятки мелких иконок, фоновых изображений и вариантов шрифтов, которые в сумме дают большой вес. Если видите повторяющиеся шаблоны имён файлов, скорее всего можно консолидировать ресурсы.
Если в вашем топ‑5 два главных изображения по 2+ МБ и один JS‑бандл 900 КБ, это уже очевидная точка старта. Исправьте их — и вы обычно почувствуете разницу сразу.
Пошагово: простая проверка веса страницы
Сначала зафиксируйте базовую метрику. Выберите одну медленную страницу (часто это главная или важная лендинговая страница) и запишите четыре числа: время загрузки, общий объём переданных байт, количество запросов и самый большой одиночный файл. Сохраните эти «до»‑заметки, чтобы потом доказать улучшение.
Затем откройте DevTools (вкладка Network) и перезагрузите страницу с отключённым кэшем. Отсортируйте по Size (или Transfer Size), чтобы увидеть, что действительно тяжело.
Полезно разбивать вес по категориям, чтобы не относиться ко всему одинаково:
- Изображения (JPG/PNG/WebP/AVIF, баннеры)
- Шрифты (часто несколько весов, которые вам не нужны)
- Видео (автоплей задников, большие MP4)
- JS и CSS (большие бандлы, source maps, неиспользуемые библиотеки)
- Сторонние скрипты (чат, трекеры, инструменты A/B)
Затем примите простое решение по каждому крупному элементу: удалить или оптимизировать.
Если ресурс никак не влияет на пользовательские действия, попробуйте удалить его сначала. Второй набор иконок, фон 1.5 МБ за текстом или маркетинговый скрипт, который никто не проверяет, часто можно убрать. Если элемент нужен — пометьте его для изменения размера, сжатия, разбиения или кэширования.
Начните с самого простого выигрыша — обычно это самое большое изображение над сгибом. Одно главное изображение 3–5 МБ может добавить секунды к первому отображению.
После каждого изменения повторяйте тест и сравнивайте с базой. Если числа не изменились, значит вы исправили не тот ресурс или он всё ещё скачивается откуда‑то ещё.
Пошагово: сжимайте изображения без заметной потери качества
Большинство проблем со скоростью начинаются с одной ошибки: кто‑то загрузил оригинал с камеры. Фото с телефона может быть 4000px в ширину и занимать несколько мегабайт, хотя сайт показывает его в 1200px.
1) Сначала выберите правильный формат
Правильный формат часто экономит больше, чем любой ползунок качества.
- JPEG: лучше для фотографий (малые файлы, плавные градиенты)
- PNG: используйте только при необходимости истинной прозрачности или для пиксельной графики
- WebP или AVIF: отлично подходят для современных сайтов, когда вы можете их отдавать (часто существенно меньше по размеру)
2) Изменяйте размер до сжатия
Экспортируйте примерно под максимальный размер, в котором изображение будет отображаться на сайте. Если главное изображение показывается в 1400px, не загружайте файл в 5000px и не надейтесь, что сжатие всё исправит.
3) Уменьшайте качество малыми шагами
Экспортируйте, проверьте в 100% масштабе, затем уменьшайте снова. Начните с высокого качества (примерно 80–85), сравните, затем шагайте вниз (75, 70, 65), пока разница не станет заметна глазу. Остановитесь на шаге до заметной деградации для обычного зрителя.
4) Убирайте скрытый «балласт»
Многие изображения содержат метаданные (информация о камере, гео‑метки, история редактирования). Удаление их экономит килобайты без визуальных изменений.
5) Сделайте процесс повторяемым
Согласуйте конвенцию экспорта, чтобы все делали одинаково. Например: page-section_subject_width.format вроде home-hero_team_1400.webp.
Если вы унаследовали AI‑сгенерированный код, где изображения разбросаны, дублируются или импортируются по‑разному, FixMyMess (fixmymess.ai) может помочь просканировать пайплайн ассетов, чтобы меньшие файлы, которые вы создаёте, действительно попали в продакшн.
Пошагово: отдавайте адаптивные размеры изображений
Адаптивные размеры означают, что маленькие экраны получают маленькие файлы, а большие файлы резервируются для случаев, где они действительно нужны. Это один из самых быстрых выигрышей без изменения дизайна.
Выберите несколько стандартных ширин, которые будете генерировать для важных изображений. Для многих сайтов достаточно 480px (телефоны), 768px (планшеты) и 1200px (десктоп).
Подбирайте файл под контекст. Сетка из 12 товаров не нуждается в фото 2000px. Если изображение показывается как небольшая карточка, используйте настоящую миниатюру, соответствующую этому размеру, а не полноразмерную версию.
Вот простой паттерн, который работает на многих страницах:
\u003cimg
src=\\\"/images/product-768.jpg\\\"
srcset=\\\"/images/product-480.jpg 480w,\n /images/product-768.jpg 768w,\n /images/product-1200.jpg 1200w\\\"\n sizes=\\\"(max-width: 600px) 480px,\n (max-width: 900px) 768px,\n 1200px\\\"\n alt=\\\"Product photo\\\"\n loading=\\\"lazy\\\"\n/\\u003e
Несколько моментов, которые стоит контролировать:
- Не полагайтесь на CSS, чтобы масштабировать огромное изображение в маленький блок — браузер всё равно скачает большой файл.
- Используйте настоящие миниатюры в списках и сетках, а большие размеры оставляйте для страниц деталей или героев.
- Делайте
sizesчестным. Еслиsizesутверждает, что изображение на мобильном отображается в 1200px, браузер может выбрать слишком большой файл.
Проверьте работу: откройте Network, перезагрузите страницу и кликните запрос изображения. Загружаемый файл должен меняться при изменении размера окна или при эмуляции телефона. Если переданный размер остаётся большим, значит srcset/sizes (или URL‑ы изображений) не соответствуют реальному отображению.
Уменьшите тяжёлые бандлы (JS и CSS), которые блокируют загрузку
Бандл — это упакованный файл, который сайт отправляет в браузер, обычно JS и CSS. Бандлы начинают с малого, затем растут по мере добавления функций, копипасты и библиотек. Когда они становятся слишком большими, браузеру приходится скачивать, парсить и выполнять больше кода, прежде чем страница станет пригодной.
Найдите, что делает бандл огромным
Аудит бандлов часто показывает одни и те же причины:
- Большая UI‑библиотека импортирована ради одного компонента
- Две библиотеки делают одну и ту же работу (даты, графики, иконки, состояние)
- Дублирование кода между точками входа или из‑за копипаста
- Помощники для разработки случайно попали в продакшн
- Импортируются целые модули, когда нужна одна функция
Увидев самые большие куски, вы обычно можете сократить размер, не меняя внешний вид сайта.
Сократите то, что грузится на первом экране
Начните с удаления безвредного хлама (неиспользуемые страницы, старые компоненты, заброшенные эксперименты). Затем разделите код так, чтобы каждая страница загружала только нужное. Код админки не должен прилетать вместе с публичной главной страницей.
Если что‑то не нужно для первого экрана, отложите его загрузку. Типичные кандидаты: виджеты чата, дополнительные аналитики, A/B‑инструменты, крупные анимации и редко используемые UI.
Практический подход:
- Загружайте код только для конкретного маршрута (code splitting)
- Заменяйте тяжёлые зависимости более лёгкими, когда возможно
- Импортируйте только то, что используете (не "import всё")
- Откладывайте некритичные скрипты до момента после первого экрана
Если реальная проблема — гигантский JS‑бандл из AI‑прототипа, FixMyMess специализируется на диагностике, ремонте и рефакторинге таких кодовых баз, чтобы они вели себя как production‑софт, а не как демо.
Используйте заголовки кэширования, чтобы повторные визиты были мгновенными
Кэширование позволяет браузеру переиспользовать файлы, которые он уже скачал, вместо того чтобы запрашивать их заново при каждом заходе. После того как вы уменьшили вес страницы, кэширование — это то, что делает сайт быстрым для возвращающихся пользователей.
Безопасное правило: кэшируйте статические файлы надолго и меняйте имя файла, когда файл меняется. Поэтому важны версионированные имена (или «fingerprint» вроде app.3f2a1c.js). При обновлении имя меняется, и браузер скачивает новую версию.
Практические настройки по умолчанию для большинства сайтов:
- Изображения, шрифты и хешированные JS/CSS:
Cache-Control: public, max-age=31536000, immutable - Нехешированные ресурсы (например,
logo.png, который вы перезаписываете): короткий кэш, напримерmax-age=3600 - HTML‑страницы: держите кэш коротким (или используйте
no-cache), если контент часто обновляется
HTML — это то, что чаще всего кэшируют неправильно. Если вы поставите длинный кэш на главную страницу, пользователи могут застрять на старой версии даже после деплоя.
Чтобы проверить кэширование, сделайте жёсткую перезагрузку один раз, затем обновляйте страницу обычным способом. Во вкладке Network повторные загрузки должны показывать очень маленькие передачи (часто помеченные как memory или disk cache) для изображений, CSS и JS.
Другие скрытые источники веса: шрифты, иконки, видео и сторонние скрипты
Даже после того, как вы убрали очевидное, страницы могут по‑прежнему казаться медленными из‑за «малых» файлов, которые в сумме дают много. Шрифты, наборы иконок, фоновые видео и сторонние скрипты часто загружаются рано и откладывают момент, когда страница становится готовой.
Шрифты — частая ловушка. Каждый вес и стиль — отдельный файл, так что regular + medium + bold + italic быстро превращаются в сотни килобайт. Большинству сайтов нужно только один‑два веса.
Иконки могут быть ещё хуже. Отправлять целую библиотеку иконок ради 12 иконок — как ехать на грузовике за продуктами. Оставьте только те, что реально используете, или экспортируйте отдельные SVG.
Видео — тяжёлый ресурс, который вы замечаете последним. Герой‑видео с автоплей на мобильном может разорить трафик и задержать взаимодействие. Безопасный подход: сначала показывайте poster‑изображение, а видео подгружайте только при нажатии или при обнаружении быстрой сети.
Сторонние скрипты (аналитика, чат, A/B) часто доминируют по времени загрузки, потому что сами тянут дополнительные скрипты. Если они нужны, загружайте их позже и убирайте дубли.
Быстрые проверки, которые обычно окупаются:
- Оставьте шрифты и веса минимум, которые всё ещё выглядят хорошо
- Замените огромные наборы иконок на набор только нужных иконок
- Отключите автоплей видео на мобильных и используйте лёгкий poster
- Проведите аудит сторонних тегов и удалите ненужное
- Делайте так, чтобы слайдеры загружали изображения только для первого слайда до взаимодействия пользователя
Распрострённые ошибки, которые держат страницы медленными
Работа по ускорению часто терпит неудачу по одной причине: исправляют симптом, а не то, что реально скачивает браузер.
«Оно сжато»... но всё ещё слишком большое
Сжатие помогает, но не решает проблему неверных размеров. Фото 4000px, сжатое и вписанное в карточку 600px, всё равно заставит скачать большой файл.
Быстрая проверка: если изображение выглядит резким при 2x масштабировании на ноутбуке, то, вероятно, ему не нужно быть тысячами пикселей в ширину.
Отложенная загрузка не тех изображений
Отложенная загрузка хороша для изображений внизу страницы. Но она часто вредна, если применяется к элементам выше сгиба: герою, логотипу или первой фотографии продукта. Браузер ждёт, скачивает позже — и страница кажется медленнее.
Практическое правило: загружайте первый экран нормально; откладывайте загрузку того, что идёт после первого скролла.
Кэширование тоже может подвести. Если задать слишком «липкий» кэш без версионирования, пользователи могут никогда не увидеть обновления (или вам придётся полностью отключить кэш). Безопасный паттерн остаётся: долго кэшируйте статические файлы, но меняйте имя файла при изменении.
Ещё две ошибки, которые тратят время:
- Оптимизация одной страницы при сохранении тяжёлых общих ресурсов (глобальный CSS, скрипты в шапке, большие иконки), которые замедляют все страницы
- Добавление «инструментов оптимизации» и плагинов, которые тихо увеличивают бандл больше, чем экономят, особенно если они поставляют тяжёлый JavaScript
Если приложение сгенерировано инструментами вроде Bolt, v0 или Replit, эти проблемы быстро накапливаются. Часто несколько слишком больших общих ресурсов делают основную часть урона.
Краткий чеклист перед релизом
Непосредственно перед релизом сделайте последний проход, чтобы убедиться, что вы действительно сократили то, что браузер скачивает при начальной загрузке.
Сделайте жёсткую перезагрузку, откройте Network и отсортируйте по Size. Сфокусируйтесь на первых запросах и самых больших элементах.
Чеклист перед отправкой:
- Проверьте топ‑5 самых крупных запросов: после изменений ничего неожиданно большого быть не должно.
- Убедитесь, что самое большое изображение соответствует контейнеру (не загружено в 4000px ради показа в 600px).
- Используйте современный формат изображений там, где он поддерживается (с надёжным запасным вариантом).
- Повторно загрузите и подтвердите, что кэширование работает для статических файлов: повторные загрузки должны передавать мало данных.
- Не добавляйте новых сторонних скриптов без измерения их влияния.
Конкретная проверка: если ваш герой на десктопе 1200px, то самый большой запрос героя должен быть в этой области, а не многомегабайтном оригинале. Если это не так — ваши настройки srcset/sizes или экспорт не сработали.
Пример: ускорение медленной главной страницы за реальный рабочий день
Основатель быстро запустил маркетинговую главную и заметил проблему: на телефонах страница зависает до того, как становится пригодной. Страница выглядит просто, но скачивает намного больше, чем нужно.
Быстрая проверка выявила три нарушителя. Герой был в 4000px и отдавался всем, даже маленьким экранам. "Маленькие" иконки на деле оказались большими PNG без сжатия. И сайт отправлял один большой JS‑бандл, который блокировал рендеринг, потому что всё загружалось сразу.
Практический порядок действий, который обычно даёт быстрый результат:
- Изменить размер героя до разумного максимума и экспортировать сжатую версию.
- Добавить адаптивные варианты, чтобы телефоны получали меньший файл.
- Конвертировать и сжать иконки (часто в SVG или в современный сжатый формат).
- Разбить основной JS‑бандл, чтобы сначала грузился только критический код.
- Добавить заголовки кэширования для статических файлов, чтобы повторные визиты были мгновенными.
Чтобы убедиться в результате, сравните «до» и «после» на том же устройстве и в той же сети. Смотрите на общий объём скачанных байт, объём изображений и время до первого видимого контента. Часто удаётся срезать несколько мегабайт и несколько секунд на устройствах среднего класса.
Где всё усложняется: AI‑сгенерированные кодовые базы часто дублируют ресурсы в нескольких папках или имеют запутанные шаги сборки, которые заново добавляют большие изображения на каждый деплой. Если сборка «воюет» с вами, начните с поиска, откуда берутся эти файлы, а не просто с повторного сжатия.
Следующие шаги, если кодовая база сопротивляется
Иногда вы делаете всё правильно, а проект всё равно остаётся медленным или хрупким. Значит, проблема не только в файлах на диске — она ещё и в том, как приложение собирают, бандлят и деплоят.
Примите одно чёткое решение: нужен ли быстрый «уборочный» ремонт или глубокий рефакторинг?
Быстрая уборка стоит того, когда страница в целом нормальная, и вы можете указать несколько тяжёлых изображений, один большой бандл или неверные правила кэша. Глубокий рефакторинг оправдан, когда каждая правка ломает что‑то, сборки непоследовательны, или бандл настолько запутан, что простые правки занимают часы.
Если приложение было сгенерировано инструментами вроде Lovable, Bolt, v0, Cursor или Replit, ожидайте скрытого «балласта»: дублированные библиотеки, неиспользуемые компоненты, изображения импортируются так, что оптимизация не срабатывает, или настройки сборки отключают минификацию и code splitting.
Пока вы трогаете настройки сборки, проведите дополнительную безопасность. Работа по ускорению может выявить более серьёзные риски.
Что проверить во время оптимизации
Короткий обзор должен покрыть:
- Открытые секреты в клиентском коде или конфигурациях
- Сломанные или непоследовательные потоки аутентификации
- Небезопасную обработку ввода (например, риски SQL‑инъекции)
- Сторонние скрипты, добавленные "для теста" и никогда не убранные
- Настройки кэширования и сжатия, отличающиеся между локальной и продакшен средой
Если хотите взгляд со стороны, FixMyMess может провести бесплатный аудит кода, чтобы указать тяжёлые бандлы, не оптимизированные изображения и рискованные упрощения. Если кодовая база сопротивляется, мы диагностируем проблему, восстановим логику, укрепим безопасность и подготовим приложение к продакшену, чтобы правки по скорости не порождали новых багов.