🧱 Суть

Производительность PHP-приложения зависит не только от скорости выполнения кода, но и от количества обращений к базе данных, файловой системе и внешним API.

Кэширование (Caching) – это способ сохранить результат вычислений или запросов, чтобы повторно использовать его без повторного выполнения.

Например:

Запрос

Проверка кэша

Есть кэш? ── Да ──► вернуть данные

    Нет

Выполнить запрос

Сохранить в кэш

Вернуть данные

Правильное кэширование снижает нагрузку на сервер и ускоряет работу приложения.

📦 Проблема

Без оптимизации приложение может выполнять одни и те же операции при каждом запросе.

Например:

$users = $repository->getUsers();

Если запрос выполняется сотни раз в минуту, база данных получает лишнюю нагрузку.

Похожая ситуация возникает при:

  • чтении файлов
  • обращении к REST API
  • сложных вычислениях
  • генерации HTML

✅ Решение

Для повышения производительности используют:

  • OPcache
  • кэширование данных
  • кэширование запросов
  • уменьшение количества обращений к БД
  • оптимизацию алгоритмов
  • профилирование приложения

💻 Код

OPcache

OPcache – встроенный механизм кэширования PHP-кода.
Без OPcache:

PHP-файл

Компиляция

Выполнение

При каждом запросе код компилируется заново.

С OPcache:

Первый запрос

Компиляция

Сохранение в память

Последующие запросы:

PHP-файл

Готовый байткод

Выполнение

Компиляция больше не требуется.

Проверить OPcache

<?php
 
phpinfo();

или:

var_dump(opcache_get_status());

Кэширование данных

Если данные редко изменяются, их можно сохранить в памяти.

Например:

База данных

Получить список городов

Сохранить в кэш

Следующие запросы используют уже готовый результат.

Кэширование API

Плохо:

$data = getWeather();

При каждом открытии страницы выполняется HTTP-запрос.

Лучше:

Проверить кэш

Есть данные?
    ↓        ↓
   Да       Нет
    ↓        ↓
Вернуть    Запрос к API
кэш         ↓
            Сохранить

Кэширование файлов

Если файл читается часто:

$config = file_get_contents('config.json');

можно сохранить его содержимое в памяти и не читать диск повторно.

Кэширование HTML

Некоторые страницы почти не изменяются.

Например:

  • главная страница
  • новости
  • каталог товаров

Их можно один раз сгенерировать и сохранить готовый HTML.
Следующие пользователи получат уже готовую страницу.

Оптимизация запросов к БД

Плохо:

100 пользователей

100 отдельных SQL-запросов

Лучше:

1 SQL-запрос

100 пользователей

Чем меньше запросов к базе данных, тем быстрее работает приложение.

Избегать повторных вычислений

Плохо:

foreach ($users as $user) {
    expensiveCalculation();
}

Если результат одинаковый, лучше вычислить его один раз.

Использовать встроенные функции

Встроенные функции PHP написаны на C и обычно работают быстрее пользовательских реализаций.

Например:

array_map();
array_filter();
array_merge();

обычно предпочтительнее собственных аналогов.

Индексы базы данных

Даже идеально написанный PHP-код не спасёт медленные SQL-запросы.

Например:

SELECT *
FROM users
WHERE email = ?;

Поиск по индексированному полю выполняется значительно быстрее.

Профилирование

Перед оптимизацией важно определить, где именно приложение тратит время.

Для этого используют:

  • Xdebug
  • Blackfire
  • Laravel Debugbar
  • Symfony Profiler

Это помогает найти реальные узкие места.

Частые ошибки

Оптимизировать без измерений

Плохо:
Сначала переписывать код, не понимая, что именно тормозит.

Лучше:
Сначала измерить производительность, затем оптимизировать найденные проблемы.

Кэшировать всё подряд

Если данные изменяются часто, кэш может стать неактуальным.
Необходимо учитывать время жизни кэша (TTL) и своевременно его очищать.

Забывать очищать кэш

Например:

Пользователь обновил профиль

Если кэш не сбросить, приложение продолжит показывать старые данные.

Выполнять лишние SQL-запросы

Например:

foreach ($users as $user) {
    getOrders($user['id']);
}

Такой подход создаёт проблему N+1 запросов.

Лучше получить все необходимые данные одним запросом.

Отключать OPcache на продакшене

Без OPcache PHP будет компилировать каждый файл при каждом запросе, что существенно снижает производительность.

🎯 Вывод

  • Производительность зависит не только от скорости PHP-кода, но и от работы с БД, файлами и внешними сервисами
  • OPcache кэширует скомпилированный PHP-код и значительно ускоряет выполнение приложения
  • Кэширование позволяет избежать повторных запросов и вычислений
  • Наибольший эффект обычно даёт оптимизация SQL-запросов и уменьшение их количества
  • Перед оптимизацией стоит определить реальные узкие места с помощью профилирования
  • Использование кэширования должно сопровождаться правильным управлением сроком жизни данных

🔗 Связано