Оптимізація продуктивності PrestaShop
PrestaShop 8.x на стандартній конфігурації дає TTFB 1.5–4 секунди на каталозі з 2000+ товарами. Причини: компіляція шаблонів Smarty без кеша, ORM з надмірними JOIN-запитами, вбудований файловий кеш. Оптимізація дає TTFB 200–500ms при правильному стеку.
Вбудований кеш PrestaShop
Admin > Advanced Parameters > Performance — головна панель оптимізації.
Smarty:
- Template compilation: Never recompile template files (не на dev)
- Cache: Yes
- Multi-front optimizations: Yes
- Clear cache: Never clear cache files
CCC (Combine, Compress, Cache):
- Smart cache for stylesheets: Yes
- Smart cache for JavaScript: Yes
- Apache optimization: Yes (генерує
.htaccessправила) - Minify HTML: Yes
Media servers — вказати CDN-домен для статики, якщо використовується.
Memcache/Redis як бекенд кеша
За замовчуванням PrestaShop кешує у файли. Перемикання на Memcache або Redis через Admin > Advanced Parameters > Performance > Caching:
- Caching system: Memcache або Redis
- Add server:
127.0.0.1:6379
Для Redis додатково в config/config.inc.php (якщо версія не підтримує Redis через UI):
define('_PS_CACHE_ENABLED_', '1');
define('_PS_CACHING_SYSTEM_', 'CacheRedis');
Клас CacheRedis в PrestaShop 8 працює через Predis. Якщо використовується розширення phpredis — швидше на 15–20%.
PHP OPcache
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0 ; production
opcache.revalidate_freq=0
opcache.interned_strings_buffer=32
opcache.fast_shutdown=1
PrestaShop має велику кодову базу — max_accelerated_files=20000 необхідно, стандартних 10000 не вистачає.
MySQL: індекси та slow log
-- Частові запити PrestaShop без оптимального індексу
ALTER TABLE ps_product_lang
ADD INDEX idx_id_lang (id_lang, id_product);
ALTER TABLE ps_category_product
ADD INDEX idx_id_category_pos (id_category, position);
ALTER TABLE ps_search_word
ADD INDEX idx_word (word(50));
Slow query log:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/prestashop-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
Типовий винуватець у slow log — запит getProducts() з сортуванням за sales без індексу на ps_product_sale.
Модулі та їхній вплив на швидкість
Кожен активний модуль PrestaShop додає хуки до життєвого циклу сторінки. Діагностика:
// config/defines.inc.php (тимчасово)
define('_PS_DEBUG_PROFILING_', true);
Після включення у браузері в нижній частині сторінки з'являється Debugger bar з часом виконання кожного хука.
Проблемні категорії модулів:
- SEO-модулі — часто роблять 3–10 додаткових запитів на сторінку
- Модулі живого чату — завантажують зовнішні скрипти синхронно
- Модулі відгуків — COUNT-запити без кеша для кожного товару в переліку
Конфігурація Nginx
# Статика
location ~* \.(jpg|jpeg|png|webp|gif|ico|svg|woff2|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
try_files $uri =404;
}
# Gzip
gzip on;
gzip_types text/plain text/css application/json application/javascript image/svg+xml;
gzip_comp_level 5;
gzip_min_length 512;
gzip_vary on;
# Заборонити прямий доступ до класів PrestaShop
location ~* \.(log|tpl|twig|sass|yml|lock)$ {
deny all;
}
WebP та зображення
PrestaShop 1.7.7+ підтримує WebP через Admin > Design > Image settings. Включити формати WebP — розмір зображень знижується на 25–40%. На сторінці переліку з 24 товарів це економить 500–800 KB.
Додатково — регенерація мініатюр з новими розмірами:
php bin/console prestashop:generate:thumbnails --type=all
Терміни робіт
Налаштування вбудованого кеша, OPcache, PHP-FPM, Redis, nginx: 1–2 дні. Аудит модулів та відключення повільних: 1 день. Включення WebP, регенерація мініатюр, індекси MySQL: 0.5–1 день.







