我在网站主页上的第一个字节(TTFB)的时间大约为1.8秒,知道最佳做法应该是500毫秒。我一直在使用调试工具,似乎大部分时间都花在控制器上,特别是我有一个查询可以拉动3500实体,这似乎并不太重要。我一直在使用调试工具并在prod版本中对此进行了测试,但是在prod版本中它仍然很慢。这是查询:
$qb = $em->createQueryBuilder();
$picturesQuery = $qb->select('DISTINCT p')
->from("AppMainBundle:ShopPicture", 'p')
->innerJoin('p.shop', 'shop')
->addOrderBy('p.numberoflikes', 'DESC')
;
//if this is not admin, then do not show locked stores
if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) {
$picturesQuery->andWhere('shop.isLocked = :isLocked')
->setParameter('isLocked', 0);
$picturesQuery->andWhere('p.isLocked = :pictureLocked')
->setParameter('pictureLocked', 0)
;
}
$query = $picturesQuery->getQuery();
$query->useResultCache(true, 3600);
$shopPictures = $query->getResult();
我一直在使用doccine2结果查询与memcached,但它似乎没有帮助。实际上查询数据库只需要大约50毫秒,这没什么。这是完整的分析信息(如果你在这里看不到它是full image):
如果我注释掉$query->getResult();
,那么它会下降到大约300-400毫秒。知道为什么吗?
答案 0 :(得分:4)
正如在IRC上所解释的那样,你应该对$ query进行分页,而不是$ shopPictures。
3500个物体的物体水化很慢:)
编辑:对于阅读评论的任何人。这里缺少的部分是分页的结果。现在如何写它的问题是它获取所有结果,只显示少数结果。