Оптимизация производительности Symfony 2

Мы ищем инфраструктуру PHP для работы в будущем и в настоящее время тестируем продукты с помощью Symfony 2. Для этого мы переработали наш API и внедрили его в виде пакета в Symfony. Оказалось, что Symfony кажется очень медленным – на самом деле намного медленнее, чем наша старая (даже не продуманная) система.

Мы попытались оптимизировать производительность путем кэширования байтового кода (для этого используется APC). Хотя мы заметили значительное улучшение производительности (до: около 3 секунд для загрузки API, после: 0,6 секунды (в среднем на 0,5 секунды меньше, чем наша старая система без APC)), мы взволнованы – но все же не очень доволен высокой загрузкой такой простой задачи, как получение одного результата из почти пустой базы данных.

Я не знаю, но я мог представить, что это связано с тем, что Symfony автоматически загружает все классы, даже если это не требуется для конкретного пакета.

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

Я был бы благодарен за любые идеи о том, как улучшить производительность, получить отчеты с использованием Symfony или что-нибудь еще, что может быть полезно для нас в поисках инфраструктуры.

Редактировать:

Некоторая информация об испытательной среде:

  • Операционная система: Ubuntu 12.04.4 LTS (GNU / Linux 3.8.0-38-generic x86_64)
  • Версия Apache: Apache / 2.2.22 (Ubuntu)
  • Версия PHP: 5.3.10-1ubuntu3.13
  • Значительные расширения PHP: apc

Кроме того, все тесты выполняются на локальной копии нашей системы, поэтому возможные сетевые проблемы могут быть исключены.

Related of "Оптимизация производительности Symfony 2"

Эти точки могут оптимизировать производительность вашего приложения:

  1. Обновите PHP. Рост производительности между PHP 5.3 и PHP 5.4 очень высок. PHP 5.5 будет еще лучше, но он не поддерживается всеми дистрибутивами, такими как Debian 7.

  2. NGINX быстрее Apache, и конфигурация проще.

  3. Использование PHP-FPM с NGINX – хорошая комбинация. Вы также можете запустить свой PHP с HHVM, который в среднем в 2 раза быстрее, чем PHP-FPM, если вы замените Symfony / Assetic на Grunt. Внимание: HHVM требует более тщательной проверки и тестирования перед безопасным развертыванием. Вы можете следить за этими двумя статьями (по-французски): JoliCode и Big Brains Company

  4. Расширение PHP APC устарело. Я думаю, что XCache, Memcached или Redis лучше, и они также наиболее поддерживаются на данный момент. Для PHP> = 5.5 APCu может использоваться как замена для APC.

Кроме того, вы можете прочитать несколько статей, посвященных оптимизации Symfony2 и предоставить тесты Twig.

Статьи PHP:

  • Скрипт с высокой производительностью на французском языке
  • Сравнение производительности PHP 5.3 и PHP 5.6 на французском языке
  • Проверьте эту статью, чтобы понять оптимизацию PHP на французском языке
  • Рекомендации Google по оптимизации приложений PHP на английском языке
  • 10 лучших методов оптимизации PHP на английском языке

Статьи Symfony2 и Twig:

  • Документация Symfony дает несколько советов, как создать приложение-исполнитель на английском языке
  • Оптимизация шаблонов на французском языке
  • Twig включают оптимизацию на французском языке
  • Использовать аннотации @Cache на английском языке
  • Symfony2: Хорошая практика на французском языке
  • Ограничьте использование ненужных пакетов
  • Оптимизация производительности Symfony2 Twig на английском языке
  • Если вы не хотите использовать Twig Engine, вы можете отключить его на французском языке
  • Кэширование в Symfony из Cookbook – действительно впечатляет!

Другие оптимизации:

  • Возможно, вы можете использовать обновленную версию Ubuntu.
  • Лично я предпочитаю использовать Debian, который также популярен для серверов, потому что он очень стабилен.
  • Использование прокси-сервера кэша, такого как Varnish, может стать последним штрихом.
  • Для лака требуется проявление разработчика и, возможно, образование. Использование кеша NGNX FastCGI для ограничения запросов FastCGI для HHVM, FPM или PHP-NG может разрешить реакцию скорости.

Вы смотрели этот пост в блоге? http://symfony.com/blog/push-it-to-the-limits-symfony2-for-high-performance-needs

Согласно вашей информации, я могу посоветовать вам попробовать php 5.5 или 5.6 и NGINX с PHP-FPM, он может на 40% быстрее или больше.

Вы можете попробовать подход, предложенный в этой статье: http://stfalcon.com/ru/blog/post/performance-symfony2-doctrine2-orm

Автор предлагает:

  • Загрузите все необходимые подключения
  • Обновление нескольких объектов по запросу
  • Получить данные как ассоциативный массив
  • Использовать контрольные прокси
  • Не забудьте использовать панель инструментов профилировщика Symfony

Описанный код доступен на github: https://github.com/lensky84/performance