Оптимизация

Исправление умного поиска, оптимизация изображений (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 раз
  • Ошибки в консоли исправлены
  • Категории и материалы в результатах поиска
  • Правила бесплатной доставки
  • Личный кабинет работает без ошибок для пользователей с тысячами заказов

Технологии

InSales JavaScript AJAX Webm/Webp Lazy-load Оптимизация E-commerce