最近我将Doctrine 2 ORM集成到CodeIgniter 2中。我将Doctrine 2配置为一个库并将它自动加载到CodeIgniter中。在一个页面我实例学说实体管理器以下列方式:Doctrine 2 EntityManager在第一次请求中导致时间损失
private static $em = null;
public function __construct() {
parent::__construct();
$this->em = $this->doctrine->em;
}
然后我开始在需要的时候使用实体管理器。我遇到的问题是,在每个页面请求中,实体管理器需要一些时间来初始化(大约1秒)。这会导致用户等待页面加载。下面你可以看到一些性能结果我测:
BENCHMARKS
Loading Time: Base Classes 0.0166
Doctrine 0.0486
GetArticle 1.0441
Functions 0.0068
Controller Execution Time 1.1770
Total Execution Time 1.1938
的GetArticle功能basicly使一个EntityManager->找到()调用:
$currentart = $this->em->find('Entities\Article', $artid);
我不得不等待一个1第二偶如果我使用EntityManager-> createQuery()方法。
在每个页面中,由于EntityManager的第一个请求,我有大约1秒的时间损失。
这是常见的吗?
这1秒钟来自EntityManager需要建立到DB的连接的事实吗?第一次请求后的功能/请求相当快。
嗨,谢谢你的回答。不幸的是,我已经阅读了您发送的链接中的内容。正如你所指出的,我也已经使用ApcCache。它仍然看起来像是在每个请求中加载元数据,即使我使用的是ApcCache。 另一个有趣的事情指出,我没有看到ApcCache,ArrayCache之间的任何性能差异。从目前为止我阅读的文章中,我预计我的应用程序在使用ApcCache时应该会更好。 难道我的ApcCache配置不正确?或者也许是因为我在本地主机上开发我的应用 –
我应该在哪里放置下面的代码:$ em-> getMetadataFactory() - > getAllMetadata(); 我也已经事先用orm:generate-proxies生成了Proxy类。所以问题必须在别的地方。 –
ApcCache要求您安装APC并正确使用PHP。检查你的phpinfo()以确保它确实工作。 –