我使用Doctrine 2开发了一个网站,现在已经准备好上线了。当我在项目开始时设置Doctrine时,我主要担心的是如何让它工作,当时我并没有太担心性能问题。尽管如此,我并不需要性能达到痴迷的程度,但我有一种感觉,如果设置不正确,Doctrine的东西可能会得到非常糟糕的性能。我考虑的是代理类,我担心它们是在每次调用时生成的,这是不好的。我的代码看起来像这样:
$config=Setup::createConfiguration(FALSE);
...
$config->setProxyDir(__DIR__."/proxies");
$config->setAutoGenerateProxyClasses(false);
...
$em='Doctrine'ORM'EntityManager::create($conn,$config);
这行得通。所谓功,是指它的行为正确。我不认为它是优化的。
从教条手册中,它说setAutoGenerateProxyClasses
:
获取或设置是否应该由Doctrine在运行时自动生成代理类。如果设置为FALSE,则必须通过doctrine命令行任务generate-proxies手动生成代理类。强烈建议在生产环境中使用FALSE。
因此,预期的行为将是我的设置,Doctrine应该尝试从代理目录加载代理。我必须运行generate-proxies
命令把它们放在那里。
奇怪的是,即使我没有代理目录,它也能工作!所以看起来Doctrine仍然在以某种方式动态地生成代理。当然,我可以运行generate-proxies
并希望得到最好的结果,但我更喜欢更系统化一些。是否有一种方法可以确保Doctrine正在加载代理而不是生成代理?
哎呀…我没有打电话给$config->setAutoGenerateProxyClasses(false);
……false
来自一个变量,毕竟它并不是完全false
……当它实际上是false
时,Doctrine拒绝自动创建代理,正如预期的那样。此外,还有orm:ensure-production-settings
命令可以从cli返回。