我在Symfony2中有一个修改对象的函数。该函数可以通过两种方式之一接收对象。首先,可以将对象传递给函数,如下所示:
public function myFunction(Object $myObject)
{
// Do something with $myObject
}
或者,可以将对象id(或任何其他属性)传递给函数并用于在函数中查找对象,如下所示:
public function myFunction($id)
{
$myObject = $this->entityManager->getRepository('AppBundle\Entity\Object')->find($id);
// Do something with $myObject
}
从功能上讲,这两种方法是等价的。我的问题是,这两种方法对应用程序性能的影响有何不同?我知道应该最小化数据库查询的数量以优化性能。那么,额外find()
的性能成本如何?
查询与将对象传递给函数的性能成本进行比较?
答案 0 :(得分:1)
将对象传递给函数将始终具有更高的性能。由于PHP5对象are passed by object identifier, very similar in concept to pass by reference。
也就是说,从数据库中检索单个原始数据记录的速度相对较快。根据我的经验,水化(将从数据库中检索到的关系数据转换为它的映射业务对象)是您发现瓶颈的地方。 Doctrine的首席开发人员Marco Pivetta撰写了excellent post about this。
一般来说,在正常情况下,您可能会发现传递物体和保湿单个物体之间的性能没有差异。然而,在循环中保湿是您遇到麻烦的地方。对象越复杂,水合的数据越多,性能越差。