Оптимизация производительности 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 день.







