fastshop — швидкий mobile-first магазин на OpenCart
Огляд
Незалежний проєкт: швидкий інтернет-магазин на OpenCart 3.0.5 / PHP 8.3 у вигляді надбудови над стандартним OpenCart — легка тема, фільтри за характеристиками з ЧПУ-адресами, чекаут на одній сторінці з вибором міста й відділення Нової Пошти, Redis-кеш, WebP і індекси БД — на каталозі з 30 000 товарів, з вимірюванням проти стандартного OpenCart на тих самих даних.
Результат: сторінки каталогу відповідають за 10 мс замість 34 мс, пошук — за 5 мс замість 267 мс; Lighthouse mobile — 100 зі сторінкою 19–28 КБ (стандарт: 272–336 КБ, перше відображення 2,1–2,4 с → 0,6–0,8 с).
Справжня складність
Стандартний OpenCart на великому каталозі важкий: стек JS/CSS на кожній сторінці, немає фільтрів за характеристиками, дорогий пошук, окремий SEO-запит на кожне посилання, сесії в БД і багатокроковий чекаут. Прискорення — не один прийом, а набір узгоджених змін, що мають переживати редагування товарів: індекс фільтрів і кеш сторінок мусять іти за адмінкою, інакше магазин покаже застарілі ціни.
Архітектура

Сторінки рендерять контролери, підключені як події OpenCart, тому ядро для них не редагується. Денормалізований індекс фільтрів (рядок на товар і категорію, рядок на значення характеристики, покривні індекси) обслуговує лістинги й лічильники значень; дані сторінок лежать у Redis під ключем версії, який скидається правками в адмінці. Тема — один вбудований стиль і JS без бібліотек.
Ключові інженерні рішення
| Рішення | Чому |
|---|---|
| Індекс фільтрів із лічильниками щодо інших груп | Звичайна семантика фасетів за ≈9–25 мс для сторінки з 3 фільтрами |
Одна канонічна ЧПУ-адреса на стан фільтра (/smartfony/f/brand-nordix/price-5000-30000) |
Кожен стан — індексована сторінка; інші порядки редіректяться на неї |
| Фільтри оновлюються без перезавантаження; під ними звичайні посилання | Швидко для користувача й працює як звичайна навігація |
| Події адмінки переіндексують товар і скидають версію кешу | Правки видно одразу, без ручного скидання кешу |
| Замовлення через штатну модель OpenCart | Воно зʼявляється в адмінці як будь-яке інше |
| Ключові слова для посилань сторінки — одним запитом | Замість одного запиту seo_url на кожне посилання |
Результати
Та сама машина, ті самі 30 000 товарів, стандартний OpenCart 3.0.5.1 проти цієї збірки:
| Показник | Стандарт | fastshop |
|---|---|---|
| Сторінка каталогу, час сервера | 34 мс | 10 мс (21 мс з порожнім кешем) |
| Пошук | 267 мс | 5 мс |
| Пропускна здатність каталогу | 160 запитів/с | 506 запитів/с |
| Фільтр за трьома умовами | — | 9 мс |
| Lighthouse mobile | 94–97 | 100 |
| Обсяг сторінки | 272–336 КБ | 19–28 КБ |
37 наскрізних перевірок покривають сторінки, кошик, чекаут і шлях через адмінку — кількості у фільтрах звірені з незалежним SQL-підрахунком із таблиць самого OpenCart.
Розвиток у ваш магазин
- Ваш каталог: імпорт штатними інструментами OpenCart, далі одна команда будує індекс фільтрів.
- Нова Пошта:
NP_API_KEYвмикає живий довідник. - Оплата: замовлення йдуть через штатну модель OpenCart, тож розширення оплати може взяти на себе крок оплати.
Код: github.com/valpere/fastshop
Стек
OpenCart 3 · PHP 8.3 · MySQL · Redis · WebP · Docker