Другие статьи
Введение
Скорость работы сайта напрямую влияет на пользовательский опыт, конверсию и SEO. Медленный PHP-сайт теряет клиентов и проигрывает конкурентам.
Но хорошая новость в том, что ускорить PHP-приложение в 2 раза и более – реально! В этой статье – практические советы по оптимизации РНР: от настройки кеширования до выбора правильных инструментов.
1. Оптимизация кода и базы данных
1.1. Профилирование и поиск узких мест
Прежде чем оптимизировать, нужно найти "узкие места":
- Xdebug + KCacheGrind/QCacheGrind – профилировщик, показывающий, какие функции "тормозят".
- Blackfire.io – мощный инструмент для анализа производительности PHP.
- Tideways – облачное решение для мониторинга.
- Медленные SQL-запросы
- Циклы с высокой нагрузкой
- Избыточные вызовы функций
1.2. Оптимизация SQL-запросов
Проблемы:
- N+1 проблема (избыточные запросы в циклах)
- Отсутствие индексов
- Сложные JOIN-запросы
Решение:
- Использовать ORM-оптимизации (например, with() в Laravel для жадной загрузки).
- Добавить индексы на часто используемые поля.
- Кешировать результаты запросов (Memcached, Redis).
- Использовать EXPLAIN для анализа запросов.
1.3. Уменьшение количества HTTP-запросов
- Объединение CSS/JS (Webpack, Vite).
- Использование SVG вместо растровых изображений.
- Ленивая загрузка (lazy-load) для изображений.
2. Кеширование: от OPcache до Redis
2.1. OPcache – ускорение выполнения PHP
Как работает: кеширует скомпилированный байт-код, избегая повторной компиляции.
Настройка в php.ini:
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60
Результат: ускорение PHP на 30-50%.
2.2. Кеширование данных (Memcached, Redis)
Когда использовать:
- Кеширование результатов запросов
- Хранение сессий
- Кеширование API-ответов
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = 'user_data_' . $userId;
if (!$data = $redis->get($key)) {
$data = fetchDataFromDatabase($userId);
$redis->setex($key, 3600, json_encode($data)); // Кеш на 1 час
}
2.3. HTTP-кеширование (Browser, CDN, Nginx)
Кеширование в браузере:
location ~* \.(jpg|jpeg|png|css|js)$ {
expires 30d;
add_header Cache-Control "public";
}
CDN (Cloudflare, Fastly) – уменьшает задержки для пользователей из разных регионов.
Если у вас есть задача по разработке сайта, SEO продвижению, технической поддержке, внедрению CRM, разработке мобильного приложения, то напишите в Телеграм https://t.me/likeitpro или на сайте https://likeit.pro/, мы это обсудим.
3. Оптимизация веб-сервера (Nginx, PHP-FPM)
3.1. Настройка PHP-FPM
Оптимальные параметры в www.conf:
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
Почему так:
- dynamic – баланс между памятью и производительностью.
- max_requests – предотвращает утечки памяти
3.2. Nginx как прокси для PHP-FPM
Оптимизация nginx.conf:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=PHP_CACHE:100m inactive=60m;
server {
location ~ \.php$ {
fastcgi_cache PHP_CACHE;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
}
}
Результат: снижение нагрузки на PHP в 2-3 раза за счёт кеширования ответов.
4. Использование современных PHP-фреймворков и инструментов
4.1. Laravel Octane (Swoole, RoadRunner)
Что даёт:
- Запуск PHP в режиме постоянной памяти (как Node.js).
- Ускорение в 5-10 раз для API и высоконагруженных проектов.
Как подключить:
composer require laravel/octane
php artisan octane:start --server=swoole
4.2. Асинхронные задачи (Queues, Horizon)
Долгие процессы (отправка email, обработка видео) лучше выносить в очереди:
- Redis + Laravel Horizon – мониторинг и управление очередями.
- RabbitMQ – для сложных распределённых систем.
5. Дополнительные оптимизации
5.1. Сжатие и минификация
- Brotli/Gzip – сжатие текстовых данных.
- Terser, CSSNano – минификация JS/CSS.
5.2. Оптимизация изображений
- WebP вместо JPEG/PNG (экономия до 50% трафика).
- Использование srcset для адаптивных изображений.
5.3. Мониторинг и автоматическое масштабирование
- New Relic, Datadog – анализ производительности.
- Kubernetes + Horizontal Pod Autoscaler – автоматическое масштабирование под нагрузкой.
Заключение: что даст ускорение в 2 раза?
- Улучшение SEO (Google ранжирует быстрые сайты выше).
- Рост конверсии (каждая секунда задержки снижает продажи на 7%).
- Снижение нагрузки на сервер (меньше затрат на хостинг).
Чеклист по оптимизации:
- Настроить OPcache + Redis.
- Оптимизировать SQL-запросы.
- Включить HTTP-кеширование (Nginx, CDN).
- Использовать Laravel Octane или Swoole.
- Минифицировать CSS/JS, сжимать изображения.
Вывод: Даже базовыми настройками кеширования мы ускоряем PHP-сайт в 2 раза без переписывания кода. Если же применить все методы из статьи – можно добиться 5-10x улучшения!
Готовы ускорить ваш PHP-сайт в 2-5 раз, улучшить пользовательский опыт и поднять позиции в поиске за счёт оптимизации производительности?
Обсудите с нами в Telegram или на сайте likeit.pro вашу задачу. Мы проведём комплексный аудит, настроим кеширование, оптимизируем код и инфраструктуру — чтобы ваш сайт работал мгновенно даже при высокой нагрузке и приносил больше клиентов.
Услуга по теме: поддержка сайта на фреймворке
Кейс по теме: кейс «AMI.BY»