Я использую Symfony версии 3.1.9 для REST API, который взаимодействует с базой данных MySQL.
Среднее время, затрачиваемое на большинство API POST (функции контроллера), составляет ~ 3-4 секунды! Да ~ 3-4 секунды 🙁
Для одного из API, вот подробности из Symfony Profiler:
1-е исполнение показателей производительности API
13307 мс Общее время выполнения
485 мс инициализация Symfony
34,25 МБ Пиковое использование памяти
2-е последующее выполнение метрик производительности API
4862 мс Общее время выполнения
266 мс инициализация Symfony
34,00 МБ Пиковое использование памяти
Вот это снимок экрана 2-го времени выполнения, и кажется, что контроллер очень занят в некоторой тяжелой обработке, НО все, что я пытаюсь сделать в функции контроллера, — это получить доступ к информации из базы данных MySQl, и я подтвердил, что запросы MySql через Doctrine не принимаются более 1 мс.
Что я пробовал?
В случае всех запросов GET, где это применимо, я использую заголовки Cache-Control, как показано ниже:
Cache-Control: must-revalidate=true
Cache-Control: max-age=180
Это не очень помогает, так как серверная машина Ubuntu (использующая Apache) перезагружается из-за времени загрузки и выполнения, а в случае API POST я все еще беспомощен.
Я также попытался включить OPcache на сервере Apache, но не уверен, что это помогает, поскольку я очень наивен в оптимизации сервера приложений и конфигурации сервера.
Пожалуйста помоги. Дайте мне знать в комментариях, если требуются какие-либо другие детали.
Вы можете использовать секундомер компонент, чтобы получить более точное время, сколько времени занимает внутри контроллера. Попытка точно профилировать приложение Symfony, работающее в среде ‘dev’, не имеет смысла — большая часть потенциальных ускорений, используемых в работе, устранена, а инструменты разработки, такие как профилировщик, отнимают много времени производить — а также строить весь контейнер.
Вы можете уменьшить порог профилировщика до 0 и просмотреть все записываемые внутренние события, а затем начать использовать такие инструменты, как Черный огонь оттуда, чтобы оптимизировать медленные вызовы и запросы к базе данных.
Также просмотр вкладки Doctrine в профилировщике покажет, что и сколько запросов выполняется. Это также может быстро показать, где могут возникнуть проблемы — в основном из-за того, что было сделано гораздо больше звонков, чем вы могли подумать.
Других решений пока нет …