← ко всем работам

Магазин на OpenCart: категория открывалась секунду, стала за 202 мс

Заказ с Kwork. Магазин запчастей для ноутбуков mekonopsis.ru: 791 834 карточки товара, база больше семи гигабайт, в одной категории 145 612 позиций. Владелец жаловался на медленные страницы и на то, что со временем сайт тормозит всё сильнее.

Время сборки страницы

Категория, страница 1

1063 мс
202 мсв 5,3 раза

Категория, страница 2

1132 мс
229 мсв 4,9 раза

Категория, страница 1500

1099 мс
218 мсв 5,0 раза

Главная

387 мс
136 мсв 2,8 раза

Карточка товара

159 мс
91 мсв 1,7 раза

Статья

124 мс
72 мсв 1,7 раза

Замеры сняты с самого сервера, медиана из трёх заходов подряд: так в цифру не попадает канал до посетителя. Шкала общая, 100% = 1132 мс.

Где была причина

Сначала я думал на базу: в категории 145 тысяч товаров, сортировка идёт по вычисляемым выражениям, и такой запрос в логе медленных однажды выполнялся 45 секунд. Но настоящая статья расхода нашлась в другом месте.

Проверка нагрузкой, которую никто не планировал

Через два часа после правок на сайт пришёл ИИ-краулер и начал качать каталог: 70 тысяч запросов в час вместо обычных трёх-пяти тысяч, около двадцати в секунду, и так несколько часов подряд. Магазин это выдержал: медианы времени сборки остались теми же, что в таблице выше. До правок такой поток сложил бы сайт. Краулеру я выставил задержку в robots.txt, поисковые системы не трогал — они приводят покупателей.

Что дальше

Синхронизация с МойСкладом по API стоит на кроне: 18 636 позиций, 431 425 карточек находят свой артикул, полный проход 78 секунд. Осталось включить оттуда же цены — это ждёт, пока владелец заведёт отдельный тип цены под сайт.