Самое трудоемкое, что делает Doctrine - это загрузка метаданных для ваших сущностей, будь то аннотации, XML или YAML.Doctrine lazy загружает метаданные, когда это возможно, поэтому вы не увидите снижения производительности, пока не начнете использовать сущности.Поскольку метаданные не изменяются, если вы не вносите изменения в свой код, Doctrine позволяет кэшировать метаданные между запросами.DQL-запросы также необходимо анализировать в SQL, поэтому Doctrine предоставляет для этого другую конфигурацию кэширования.
В производственной среде вы должны настроить эти кэши (похоже, что вы уже это сделали, но для других, читающих это):
$cache = new \Doctrine\Common\Cache\ApcCache(); // or MemcacheCache
$configuration->setMetadataCachImpl($cache); // caches metadata for entities
$configuration->setQueryCachImpl($cache); // caches SQL from DQL queries
Чтобы предотвратить загрузку первой страницы полной загрузки метаданных, вы можете настроить подогрев кеша, который загружает все метаданные класса и сохраняет их в кеш.
$em->getMetadataFactory()->getAllMetadata();
Еще одним потенциальным узким местом является генерация прокси-классов.Если это не настроено правильно в производственной среде, Doctrine будет генерировать классы и сохранять их в файловой системе при каждой загрузке страницы.Эти прокси-классы не изменяются, если не изменяется код объекта, поэтому для этого снова нет необходимости.Чтобы ускорить процесс, вы должны сгенерировать прокси с помощью инструмента командной строки (orm: generate-proxies) и отключить автогенерацию:
$configuration->setAutoGenerateProxyClasses(false);
Надеюсь, это вам поможет.Дополнительную информацию можно найти по адресу http://www.doctrine -project.org / docs / orm / 2.0 / en / reference / улучшение-performance.html # bytecode-cache