虽然只有6个数据库查询,但我的应用主页的请求时间大约为5秒。所以我决定在我的本地服务器上安装带有webgrind的xdebug来配置我的应用程序。在那里我可以看到,我有大量的学说方法调用,但我不知道如何解释这个以减少调用的次数。也许有人可以给我一个提示。
RestaurantRepository
public function findByCity(City $city) {
$queryBuilder = $this->createQueryBuilder('restaurant');
$queryBuilder->addSelect('cuisines')
->addSelect('openingHours')
->addSelect('address')
->addSelect('zipCode')
->addSelect('city')
->leftJoin('restaurant.cuisines', 'cuisines')
->leftJoin('restaurant.openingHours', 'openingHours')
->leftJoin('restaurant.meals', 'meals')
->innerJoin('restaurant.address', 'address')
->innerJoin('address.zipCode', 'zipCode')
->innerJoin('zipCode.city', 'city')
->where('zipCode.city = :city')
->andWhere('restaurant.state <= :state')
->setParameter('city', $city)
->setParameter('state', Restaurant::STATE_ENABLED)
->orderBy('restaurant.state', 'ASC')
->addOrderBy('restaurant.name', 'ASC');
return $queryBuilder->getQuery()->getResult();
}
答案 0 :(得分:0)
您可能会加载某些实体的所有关联。如果没有关于您的实体定义和正在执行的查询的更多信息,很难说问题究竟在哪里。
在学说文档中有一些关于 improving performance 的建议(其中一个是关于延迟加载关联)可能有助于您继续前进。
答案 1 :(得分:0)
安装并启用ZendDeveloperToolbar module。在那里,您可以检查每次操作所进行的DB调用次数。
正如你在图像上看到的那样,引擎盖下有很多水合作用。网上有很多关于如何不使用Doctrine的教程。如果不看你正在对你的实体做什么,我就无法说出任何话。
还要确保在生产模式下启用了缓存,因此Doctrine不必解析每个请求的映射信息,这非常繁重。您可能正在使用注释驱动程序,这是最慢的驱动程序。
我还可以看到你使用的Zend自动加载器与Composer相比效率很低。只需将您的modules / src添加到composer.json文件的自动加载部分,然后让Composer进行自动加载。