2017-01-11 6 views
1

Чтение документов о производительности Symfony2: http://symfony.com/doc/2.8/performance.htmlВ Symfony2, какой метод кэширования класса path более эффективен: карта класса Composer или ApcClassLoader с использованием APCu?

Я пытаюсь выяснить, какое решение лучше для кэширования путей имен классов. Я использую PHP7, поэтому APC недоступен, просто apcu и opcache. Учитывая, что у меня нет проблем со сложностью реализации кеша или необходимости перезапуска веб-сервера, который был бы наиболее эффективным? Кроме того, если я поеду с автозагрузчиком APC, код app.php все равно должен сначала загрузить композитор autoload.php, создать ApcClassLoader, а затем отменить регистрацию исходного автозагрузчика. Было бы разумно очистить карту классов, чтобы неиспользованная карта не тратила столько памяти, то есть запуска: composer dump-autoload --no-dev?

ответ

0

«Золотой стандарт» для установки автозагрузки в производстве - это как сказано в документе symfony docs: composer dump-autoload --optimize --no-dev --classmap-authoritative.

  • --optimize Сплин каждый PSR-0 и PSR-4 совместимый класс, используемый в приложении.
  • --no-dev Исключает классы, которые необходимы только в среде разработки (например, тесты).
  • --classmap-authoritative Предотвращает сборщик от сканирования файловой системы для классов, которые не найдены в карте классов.

В разработке такие оптимизации, вероятно, слишком велики, так как каждый новый класс, который вы пишете, должен иметь по крайней мере composer dump-autoload - и гибкость более полезна.

Как только классная карта была записана на диск один раз, а затем снова прочитана, она будет доступна через OpCache в любом случае, и поэтому она фактически будет находиться в пространстве процессов PHP для максимальной скорости.

Чтобы добавить дополнительную скорость к использованию OpCache, еще одна вещь, которую вы можете сделать, это остановить ее от проверки изменений для кешированных файлов - это можно отключить, установив opcache.validate_timestamps = false. Если файлы будут изменены, вам придется перезапустить сервер PHP (php-fpm или Apache, если вы используете mod_php) или иным образом недействительным кэшировать OpCache.