我一直在研究服务器上的性能瓶颈,并在创建Doctrine2实体管理器时跟踪它。我创建了一个简单的测试页面(包括我们的vendor / autoload.php文件)并加载测试作为基线。然后我包含并使用一个创建EntityManager的文件(我不对它做任何事情,我只是实例化它)。
创建EntityManager时的负载测试会显着增加平均页面加载时间(3秒以上),并最终提供超时和500秒。我猜测超时是因为CPU被工作量所淹没。但500年代提供了一些有趣的信息。日志文件显示套接字无法打开,因为打开的文件太多。在没有创建实体管理器的情况下,我的服务器只显示为Apache打开的~5k文件,但是在制作EntityManager时,所有Apache进程的文件数量都达到了~100k。
在本地使用带有相同测试的webgrind(使用和不使用EntityManager加载)显示Composer\Autoload\includeFile
在使用EntityManager时会被多次调用48次并且需要15毫秒(对于每个请求)。
所以我的问题是:如何加快Doctrine2的加载时间并减少自动包含的文件数量?(或减少加载它们所需的时间)?
Doctrine 1似乎提供了一种将一些组件编译成一个文件http://doctrine.readthedocs.io/en/latest/en/manual/improving-performance.html的方法。 Doctrine2中是否有类似内容?谷歌搜索似乎没有任何改变。
我已经安装了APC并配置了Doctrine以将其用作元数据缓存。这对一些人有所帮助,但没有我想象的那么多。
我也已经使用composer来转储一个光学化的类图。这也有很大的帮助,但仍然没有理想。