Прискорення PrestaShop: де магазин втрачає секунди та замовлення
Повільний PrestaShop майже ніколи не впирається в «слабкий сервер» — він впирається в конкретні вузькі місця, які видно у профілювальнику та логах повільних запитів.
Каталог на кілька тисяч товарів із фільтрами за атрибутами та комбінаціями породжує важкі вибірки з безліччю JOIN, а сторінка категорії збирає ціну, наявність і знижку для кожного товару окремим зверненням до бази.
Додайте сюди неоптимізовані шаблони із зайвими модулями в хуках — і відгук сервера зростає з кожною встановленою знижковою чи рекомендаційною надбудовою.
Ціна цього — не абстрактні «секунди», а поведінка покупця.
Швидкість завантаження інтернет-магазину безпосередньо впливає на те, чи дійде людина до кошика: на повільному каталозі частина відвідувачів іде, не дочекавшись відрисовки списку, а пошуковики рідше показують сторінки з поганими показниками відгуку.
Під навантаженням, у розпродаж або рекламну кампанію, картина загострюється: розрослі таблиці статистики, кошики та логи починають конкурувати за ресурси з каталогом, і магазин просідає саме тоді, коли приходить трафік.
Окрема категорія — оптимізація швидкості магазину на стороні віддачі: нестиснуті зображення каталогу, блокуючі скрипти модулів, відсутність кешування сторінок і повторні запити до бази на кожному хіті.
Тут важливо не гадати, а виміряти: зняти профіль запитів, подивитися, які сторінки віддають відповідь довше за інших, і знайти, що саме з'їдає час — база, шаблон чи зовнішні виклики.
Ми починаємо прискорення PrestaShop з діагностики, а не зі встановлення чергового модуля кешу: спочатку карта вузьких місць PrestaShop, потім точкові правки — індекси та переписані запити каталогу, чистка хуків і шаблонів, налаштування кешу та стиснення. Далі розбираємо, як це закривається крок за кроком.
Що дає прискорення PrestaShop: час відгуку, кеш, відмови
Прискорення PrestaShop починається з чесного вимірювання: де саме магазин втрачає час. На практиці 60–80% затримки дає не фронтенд, а каталог — важкі вибірки за комбінаціями атрибутів, перерахунок цін і залишків на кожній сторінці лістингу. Поки це не розділено за шарами, будь-яка правка «на око» прискорює одну сторінку і валить іншу.
Кешування на рівні застосунку
Повносторінковий кеш для гостей і категорійних лістингів знімає повторне складання шаблону і запитів до бази. Час відгуку категорії падає з секунд до сотень мілісекунд, а навантаження на сервер перестає лінійно зростати з кількістю відвідувачів.
Обмеження — кошик, оформлення замовлення і особистий кабінет кешувати не можна, вони збираються персонально.
Оптимізація запитів каталогу
Тут іде основний клас відмов під піком. Розділяємо вибірку товарів і підрахунок фасетів, прибираємо SELECT * і зайві JOIN за пов'язаними таблицями, виносимо перерахунок знижок і наявності у фонові задачі.
Каталог на кілька десятків тисяч позицій перестає блокувати з'єднання при одночасному напливі — замість черги і таймаутів сервер віддає сторінку за передбачуваний час.
Інфраструктурний шар
Кеш об'єктів і сесій у пам'яті, окремий вузол під статику, HTTP-кеш для зображень і ресурсів теми. Це не прискорює окремий запит, але знімає навантаження на сервер баз даних — саме він найчастіше стає вузьким місцем при трафіку.
| Підхід | Коли підходить | Обмеження |
|---|---|---|
| Повносторінковий кеш | Каталог, категорії, картки для гостей | Не працює для кошика і авторизованих сценаріїв |
| Оптимізація запитів каталогу | Великий каталог, складні фільтри і знижки | Потребує переробки модулів і шаблонів теми |
| Кеш у пам'яті і CDN | Стабільний трафік, багато статики | Не лікує повільні запити до бази |
| Заміна заліза | Швидкий тимчасовий ефект | Проблема повертається при зростанні каталогу |
Комбінація перших трьох дає стійкий результат: час відгуку магазину скорочується в рази, а пікові відмови йдуть як клас. Ми спираємося на штатний механізм кешування і профілювання запитів PrestaShop, а не на сторонні надбудови, які ламають оновлення.
Як ми прискорюємо PrestaShop: етапи інженерної роботи
Прискорення PrestaShop починається не з правок у шаблонах, а з вимірювання: поки немає точних даних, де саме втрачається час, будь-яка оптимізація перетворюється на вгадування.
Тому перший крок — аудит продуктивності PrestaShop на реальному профілі навантаження: знімаємо заміри на каталозі, кошику, оформленні замовлення та адмінці, розбираємо повільні запити до бази, вагу та кількість файлів на сторінці, поведінку модулів і сторонніх розширень.
На виході — карта вузьких місць із пріоритетами: що дає основний приріст, а що лише маскує проблему.
- Аудит продуктивності PrestaShop. Профілюємо ключові сценарії, збираємо статистику повільних запитів, заміряємо час відповіді до та після прогріву кешу, фіксуємо базову лінію для порівняння.
- План оптимізації. Складаємо схему робіт з очікуваним ефектом за кожним пунктом: індекси та структура запитів, вимкнення зайвих модулів, оптимізація шаблонів і зображень, налаштування серверного оточення.
- Налаштування кешу. Конфігуруємо кешування на всіх рівнях — компіляція шаблонів, кеш каталогу та категорій, кеш об'єктів, кеш сторінок на рівні сервера, — з коректною інвалідацією при оновленні товарів і цін.
- Оптимізація запитів і бази. Переписуємо важкі вибірки, додаємо відсутні індекси, чистимо застарілі таблиці статистики та логів, які непомітно сповільнюють каталог.
- Тестування під навантаженням. Прогоняємо сценарії з паралельними користувачами, перевіряємо поведінку під піком, дивимося, як поводиться кеш при холодному старті, і повторюємо заміри відносно базової лінії.
- Передача документації. Віддаємо конфігурації, схему кешування, список змінених запитів і модулів, інструкцію з безпечного оновлення та відкату, а також чеклист для контролю після релізу.
Кожен етап закінчується вимірюваним результатом, а не звітом «роботи виконано». Якщо після налаштування кешу час відповіді каталогу не змінився, значить, вузьке місце було не в кеші — і ми повертаємося до аудиту, а не йдемо далі за списком.
Такий порядок виключає ситуацію, коли магазин «оптимізували», а він усе ще гальмує на оформленні замовлення.
Опишіть задачу та поточний стек — повернемося з оцінкою та планом робіт для вашого магазину.
Чим відрізняється прискорення через кеш від оптимізації запитів?
Кеш і оптимізація запитів вирішують різні завдання, і плутати їх — найчастіша причина, чому прискорення PrestaShop дає ефект на тиждень, а потім магазин знову «пливе».
Кеш прибирає повторну роботу: сторінка каталогу, зібрана один раз, віддається зі сховища, поки дані не змінилися. Оптимізація запитів прибирає саму роботу: важкий SQL перестає сканувати таблиці цілком. Перше лікує симптом, друге — причину, і окремо кожне впирається у свою стелю.
Кешування вигідне там, де дані читають часто, а змінюють рідко: категорії, картки товарів, статичні сторінки, блоки з добірками. Поки каталог не оновлюється, віддача йде з кешу, і база відпочиває.
Але щойно кеш інвалідується — при масовому імпорті, зміні цін, оновленні залишків — усі запити повертаються разом. Якщо вони не оптимізовані, магазин отримує сплеск навантаження саме в той момент, коли це критично.
Оптимізація запитів працює на рівні структури даних. Індекси бази даних перетворюють перебір рядків на точковий пошук: фільтри за категорією, ціною, атрибутами, сортування в лістингу, вибірки в адмінці перестають читати таблиці цілком.
Переписаний SQL прибирає зайві з'єднання та повторні звернення до одних і тих самих таблиць у межах однієї сторінки. Це дає стійкий виграш на будь-якому обсязі каталогу — і на холодному кеші теж.
Вибір підходу визначається профілем навантаження. Якщо каталог невеликий, а трафік рівний, грамотно налаштованого кешу PrestaShop достатньо — він закриває основну частину віддачі.
Якщо каталог у десятки тисяч позицій, багато фільтрів і часті оновлення залишків, кеш без оптимізації SQL буде постійно інвалідуватися і не встигне охолонути.
На практиці підходи поєднуються: спочатку прибирають зайві запити й додають індекси, потім налаштовують кеш поверх уже швидких вибірок — так він тримає навантаження, а не маскує його.
Порядок робіт тут не випадковість, а умова результату: кеш поверх повільних запитів дає короткий ефект і високий ризик, що при першому ж оновленні каталогу магазин ляже.
Опишіть ваш випадок — обсяг каталогу, частоту оновлень, піки трафіку — і ми повернемося з оцінкою, який підхід дасть стійке прискорення саме у вас.
Кейс: як прискорення PrestaShop скоротило час відгуку втричі
До нас звернувся магазин на PrestaShop з каталогом, який зростав швидше, ніж інфраструктура: десятки тисяч товарів, сотні комбінацій атрибутів, десятки тисяч відвідувачів на добу.
Каталог розрісся, а сторінка категорії збиралася з сотень окремих звернень до бази — за пікового навантаження час відгуку сягав 6-8 секунд, і частина запитів відвалювалася за таймаутом.
Власник бачив це як «сайт іноді лежить у годину пік» і втрачав замовлення саме в найприбутковіші години.
Ми зняли профіль на бойовому трафіку та на синтетичному навантажувальному тесті, що відтворює пік.
Картина виявилася типовою для розрослого PrestaShop: важкі вибірки за зв'язками товар-атрибут-категорія виконувалися на кожен показ, кеш сторінок не покривав фільтри та пагінацію, а частина модулів вантажила дані синхронно там, де це не потрібно.
Окремо перевірили індекси — на розрослих таблицях зв'язків їх бракувало, і база сканувала таблиці цілком.
Що змінили: переписали найважчі запити каталогу та додали відсутні індекси, увімкнули багаторівневий кеш — сторінки, блоки категорій і результати фільтрів, винесли статику та медіа на окремий шар віддачі, відклали некритичні модулі. Кожну зміну перевіряли навантажувальним тестом, щоб не зловити регрес на піку.
Метрики до та після:
| Показник | До | Після |
|---|---|---|
| Час відгуку категорії (пік) | 6-8 с | 2-2,5 с |
| Частка запитів із таймаутом | помітна | поодинокі |
| Навантаження на базу в пік | лінійно зростало з каталогом | стабільне |
| Поведінка за пікового трафіку | деградація, відмови | тримає пік без просідання |
Клас відмов, який зник, — деградація під піком: раніше за напливу відвідувачів сайт починав «сипатися» і втрачав замовлення, тепер пік проходить штатно.
Прискорення PrestaShop тут дав не один прийом, а зв'язка «запити + кеш + віддача статики», і саме тому результат стійкий, а не разовий.
Методологію кешування та розбору важких запитів ми відпрацьовували на практиці, спираючись на документацію PrestaShop щодо продуктивності та на профілювання на реальному трафіку.
Сумніви щодо сумісності, міграції та відкату — обговоримо задачу
Найпоширеніший технічний страх перед прискоренням PrestaShop — що після правок поїдуть ціни, зламається оформлення замовлення або відвалиться інтеграція з 1С і складом.
Тому ми ніколи не чіпаємо робочий магазин «в лоб»: спочатку знімаємо повну копію бази та файлів, розгортаємо її на окремому стенді й усі зміни — кешування, індекси, шаблони, модулі — проганяємо там.
Лише коли копія проходить перевірку оформлення замовлення, кошика та вивантаження, конфігурація переноситься на робочий сервер.
Відкат у нас теж не «на словах». Перед викаткою фіксуємо точку повернення: знімок бази, версію файлів, список змінених налаштувань. Якщо після перенесення щось поводиться не так, повертаємо магазин до цієї точки за хвилини, а не за ніч ручного розбору.
Доступи видаємо за принципом мінімально необхідного: окремий користувач під задачу, без прав на платіжні дані клієнтів, усі дії — у журналі, доступ закривається після завершення робіт.
А якщо в нас нестандартні модулі та власна тема?
Це якраз норма, а не виняток. Перед стартом ми розбираємо, які модулі втручаються у виведення каталогу та кошика, і перевіряємо прискорення саме на них — на стенді з вашою копією.
Якщо сторонній модуль несумісний з увімкненим кешуванням, знаходимо обхідний шлях або залишаємо його поза кешем, щоб не втратити функціональність.
Що якщо оновлення PrestaShop конфліктує з поточними правками? Ми фіксуємо гілку та версію ядра до початку робіт і не тягнемо оновлення в процесі — інакше втрачається точка відкату. Оновлення плануємо окремим етапом, уже після стабілізації швидкості.
А якщо після здачі знадобиться доопрацювання? Передаємо не лише результат, а й те, як він улаштований, — щоб правки можна було вносити без нас.
На руки замовник отримує:
- знімок бази та файлів до змін — точка повернення;
- перелік змінених налаштувань сервера, кешу та PrestaShop;
- конфігурацію кешування та правил індексації;
- схему розгортання стенда та робочого середовища;
- список модулів із позначкою сумісності;
- журнал доступів і матрицю прав;
- коротку інструкцію з відкату та перевірки після релізу.
Опишіть вашу конфігурацію — які модулі, тема, як улаштоване вивантаження товарів. Повернемося з оцінкою та планом робіт під ваш магазин.







