Workspace Digital Awards — приём заявок открыт! Успейте номинироваться по самой низкой цене. Повышение цен с 1 октября.
Дмитрий Гапонов
Магазин электроники на 800 тысяч товаров - товарные фиды, фильтр по характеристикам, ускорение
Дмитрий Гапонов
#Поддержка и развитие сайта

Магазин электроники на 800 тысяч товаров - товарные фиды, фильтр по характеристикам, ускорение

Дмитрий Гапонов Россия, Новосибирск
Поделиться: 0 0 0
Сфера

Электронная коммерция

Сдано

Сентябрь 2026

Задача

Магазин комплектующих для ремонта электроники на OpenCart, восемьсот тысяч опубликованных товаров. Работа шла кусками несколько недель, каждый кусок отдельным заказом.

Началось с рекламы, которая не получала товаров. Товарные фиды не обновлялись с начала лета, отдавали миллион предложений без цен и картинок, а карта сайта вела на старые адреса, каждый из которых отвечал переадресацией. Дальше встал фильтр по характеристикам - в теме он был, но не работал. Потом пошли оформление заказа и скорость сайта. Доступ дали полный, вместе с файлами, базой и панелью сервера. Отдельным фоном шли жалобы вида «сайт висит» и «не открывается с телефона», их приходилось разбирать между делом.

Решение

Фиды. Штатный модуль тратил сто восемьдесят четыре секунды на восемь тысяч товаров, около девяти часов на каталог, потому что адрес каждого товара собирался отдельным запросом. Написал свой выгрузчик прямым запросом к базе, весь каталог считается за двадцать две секунды при двух мегабайтах памяти. Формулу адреса вывел по коду модуля адресов и проверил на живых страницах, шестьдесят шесть случайных ссылок и картинок отдали код 200. Прежние файлы уехали в отдельную папку, это и есть откат. Обновление повесил на крон каждую ночь.

Фильтр. Тему переписывать не стал, свой фильтр в ней лежал готовым и был просто выключен. Не работал он по одной причине - при открытии категории он тянул все товары в память и на каждый делал отдельный запрос за характеристиками. В категории с двумястами тысячами товаров это двести тысяч запросов. Переписал чтение на готовую таблицу, которую собирает отдельный сборщик одним группирующим запросом по всему каталогу, и поставил индекс на таблицу характеристик в два и семь миллиона строк.

Индексацию закрыл отдельно. Комбинация галочек уходит из поиска с каноническим адресом на чистую категорию, одиночный фильтр остаётся со своим заголовком и описанием, пустая выдача в индекс не пускается вовсе - иначе подстановкой любого значения в адрес робот наплодит сколько угодно пустых страниц.

На телефоне список значений получил свою прокрутку, а кнопка применения прибита к низу экрана. Иначе до неё пришлось бы пролистать сто восемьдесят шесть значений ёмкости.

Результат

Фиды стали отдавать четыреста тридцать одну тысячу предложений только по товарам в наличии вместо миллиона мусорных, карта сайта восемьсот одну тысячу адресов нынешнего вида, обновление идёт само каждую ночь. Полный пересбор фасетов девятнадцать секунд, чтение одной категории полмиллисекунды. Страница категории с двумя отмеченными галочками считается 0,47 секунды вместо 0,82, пересчёт числа товаров при выборе на тёплом кеше 0,13 секунды. Заказчик после этого приносил следующие работы по тому же магазину.


Стек технологий


Оцените кейс
Спасибо за оценку
Выскажите мнение
Авторизуйтесь, чтобы добавить свой комментарий.
оставить заявку

Хотите заказать похожий проект?

Оставить заявку