Оптимизация поиска и скорости загрузки интернет-магазина
CrowdGames
Исправление умного поиска, оптимизация изображений (GIF → webm/webp), ускорение загрузки, доработка личного кабинета. InSales, lazy-load, правила доставки.
Задача
CrowdGames — интернет-магазин настольных игр на платформе InSales. Каталог здесь широкий, а покупатель обычно приходит с конкретным названием в голове, поэтому умный поиск для такого магазина — не украшение, а основной способ навигации. К нам обратились с набором накопившихся проблем: поиск вёл себя непредсказуемо, шапка сайта грузилась долго из-за тяжёлой анимации, а в личном кабинете у части клиентов страница заказов просто падала с ошибкой.
Задача формулировалась широко: починить умный поиск, снизить влияние тяжёлых GIF в шапке, ускорить загрузку страниц и заодно закрыть несколько задач по UX и бизнес-логике. Мы не переписывали витрину с нуля — работали точечно по живому магазину, чтобы каждое изменение можно было проверить на реальном трафике и не сломать то, что уже работает.
Что нашли
Первым делом разобрали текущее поведение. Часть дефектов воспроизводилась сразу, часть проявлялась только в определённых условиях — например, у незалогиненного посетителя или при вводе слова с буквой «ё». Вот что всплыло при диагностике:
- Умный поиск — не срабатывал для незалогиненных пользователей, баг с символом "ё"
- Тяжелые изображения — шапка тянула GIF весом 5+ МБ, замедляла загрузку
- Ошибки в консоли — дубли запросов, некорректная обработка
- Личный кабинет — 505/555 ошибки при большом числе заказов
Что сделали
Поиск
Умный поиск на InSales работает через AJAX: пока пользователь печатает, витрина дёргает подсказки. Именно здесь пряталась основная беда — запросы уходили без разбора, дублировались на каждое нажатие клавиши, а для гостя без сессии выдача вообще не формировалась. Мы навели порядок в этом слое: добавили debounce, чтобы запрос уходил не на каждый символ, а после короткой паузы в наборе, и убрали двойные обращения. Отдельно починили обработку слова с «ё» и разблокировали поиск для неавторизованных посетителей. Плюс доработали саму выдачу под специфику магазина настолок.
- Исправили баг для незалогиненных пользователей
- Оптимизировали AJAX-поиск (debounce, устранение двойных запросов)
- Добавили индикатор загрузки
- Исключение заданных слов из запроса (например, слово "игра")
- Добавили категории и материалы в результаты поиска (отдельный блок)
Исключение служебных слов — маленькая, но важная деталь: запрос «настольная игра Каркассон» не должен захлёбываться от слова «игра», которое встречается почти в каждом товаре. А отдельный блок с категориями и материалами помогает покупателю попасть в нужный раздел, даже если он не угадал точное название.
Оптимизация изображений
Главный тормоз на входе — анимированный баннер в шапке. Один GIF весил больше пяти мегабайт и грузился раньше всего остального контента, из-за чего первое впечатление от сайта на телефоне было «висит». GIF как формат для тяжёлой анимации давно проигрывает видео, поэтому мы перегнали баннер в webm/webp и подключили отложенную загрузку картинок ниже первого экрана.
- Переход с GIF на webm/webp (GIF 5.25 МБ → WEBM 459 КБ)
- Lazy-load для отложенной загрузки
- Рекомендации по конвертации медиа
Бизнес-логика
Параллельно закрыли несколько задач, где правила магазина пересекались с кодом витрины. Самая неприятная — падение личного кабинета: у клиентов с большим числом заказов страница отдавала 505/555. Причина была в расчёте через одну общую переменную, которая при тысячах заказов переполнялась. Мы переписали логику на локальные подциклы, чтобы каждый заказ считался в своей области видимости, и страница перестала падать вне зависимости от истории покупок.
- Показ копеек только в личном кабинете
- Правило бесплатной доставки при наличии товара с определенным параметром
- Исправление 505/555 ошибок в ЛК (локальные подциклы вместо единой переменной)
Результат оптимизации
Главная страница: GIF 5.25 МБ заменен на WEBM 459 КБ. Вес снизился в 11 раз. Загрузка стала мгновенной на мобильных.
Результат
После доработок магазин стал вести себя предсказуемо на всех сценариях, которые раньше давали сбои. Поиск отвечает быстро и одинаково для гостей и авторизованных, шапка больше не блокирует загрузку, а личный кабинет держит клиентов с длинной историей заказов.
- Поиск стабильно работает для всех пользователей
- Вес главной страницы снизился в 11 раз
- Ошибки в консоли исправлены
- Категории и материалы в результатах поиска
- Правила бесплатной доставки
- Личный кабинет работает без ошибок для пользователей с тысячами заказов