Производительность

Symfony быстрая сразу после установки. Однако, вы можете сделать её ещё быстрее, если вы оптимизируете ваши сервера и приложения, как объясняется в следующих контрольных списках производительности.

Контрольный список приложений Symfony

  1. Установите APCu Polyfill, если ваш сервер использует APC

Контрольный список сервера производства

  1. Используйте кеш байтового кода OPcache
  2. Сконфигурируйте OPcache для максимальной производительности
  3. Не проверяйте временные отметки PHP файлов
  4. Сконфигурируйте кеш реального пути PHP
  5. Оптимизируйте автозагрузчик Composer

Устновите APCu Polyfill, если ваш сервер использует APC

Если ваш сервер производства всё ещё использует наследуемое расширение PHP APC вместо OPcache, установите компоненет APCu Polyfill в вашем приложении, чтобы подключить совместимость с функциями PHP APCu и разблокировать поддержку продвинутых функций Symfony, вроде адаптера кеша APCu.

Используйте кеш байтового кода OPcache

OPcache хранит скомпилированные PHP файлы, чтобы избежать их повторной компиляции на каждый запрос. Существуют некоторые доступные кеши байтового кода , но начиная с PHP 5.5, PHP поставляется со встроенным OPcache. Для более старых версий, наиболее используемым кешем байтового кода является APC.

Сконфигурируйте OPcache для максимальной производительности

Конфигурация OPcache по умолчанию не подходит для приложений Symfony, поэтому реокмендуется изменить следующие настройки таким образом:

1
2
3
4
5
6
; php.ini
; максимальная память, которую может использовать OPcache для хранения скомпилированных PHP файлов
opcache.memory_consumption=256

; максимальное количество файлов, которое может храниться в кеше
opcache.max_accelerated_files=20000

Не проверяйте временные отметки PHP файлов

На серверах производства, PHP файлы никогда не должны изменяться, кроме случаев развёртывания новой версии приложения. Однако, по умолчанию, OPcache проверяет, не изменили ли файлы своё содержание с тех пор, как они были кешированы. Эта проверка вводит некоторую перенагрузку, которую можно избежать таким образом:

1
2
; php.ini
opcache.validate_timestamps=0

После каждого развёртывания, вам нужно опустощать и регенерировать кеш OPcache. Иначе вы не будете видеть обновления, сделанные в приложении. Учитывая,что в PHP CLI и веб-процессы не имеют общего OPcache, вы не можете очистить веб-сервер OPcache выполнив некотрую команду в вашем терминале. Вот некоторые из возможных решений:

  1. Перезапустите веб-сервер;
  2. Вызовите функции apc_clear_cache() или opcache_reset() через веб-сервер (т.е. имея их в скрипте, который вы выполняете через сеть);
  3. Используйте утилиту cachetool, чтобы контролировать APC и OPcache из CLI.

Сконфигурируйте кеш реального пути PHP

Когда относительный путь трансформируется в настоящий и абсолютный, PHP кеширует результат, чтобы улучшить производительность. Приложения, которые открывают много PHP файлов, например, проекты Symfony, должы использновать хотя бы эти значения:

1
2
3
4
5
6
; php.ini
; максимальная память, отведенная под хранение результатов
realpath_cache_size=4096K

; сохранять результаты на 10 минут (600 секунд)
realpath_cache_ttl=600

Оптимизируйте автозагрузчик Composer

Загрузчик класса, используемый во время разработки приложения, оптимизирован для поиска новых и изменённых классов. На серверах производства, PHP файлы никогда не должны изменяться, разве что развёртывается новая версия приложения. Поэтому вы можете оптимизировать автозагрузчик Composer, чтобы один раз сканировать приложение полностью и построить "карту класса", которая является большим массивом расположений всех классов и хранится в vendor/composer/autoload_classmap.php.

Выполните эту команду, чтобы сгенерировать карту класса (и также сделать её частью вашего процесса развёртывания):

1
$ composer dump-autoload --optimize --no-dev --classmap-authoritative
  • --optimize сбрасывает все совместимые с PSR-0 и PSR-4 классы, используемые в вашем приложении;
  • --no-dev исключает классы, которые нужны только в окружении разработки (например, тесты);
  • --classmap-authoritative предотвращает Composer от сканирования файловой системы на предмет классов, которые не найдены в карте классов.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.