我在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()查询的性能成本与将对象传递给函数的性能成本相比如何呢?
发布于 2017-03-19 03:16:14
将对象传递给函数总是性能更高。因为PHP5对象是are passed by object identifier, very similar in concept to pass by reference。
也就是说,从数据库中检索原始数据的单个记录相对较快。在我的经验中,水合(将从数据库检索到的关系数据转换为其映射的业务对象)是您发现瓶颈的地方。Marco Pivetta,Doctrine的首席开发人员,已经编写了一个excellent post about this。
一般来说,在正常情况下,您可能会注意到传递对象和合并单个对象在性能上没有区别。然而,循环中的水合是你遇到麻烦的地方。对象越复杂,水合数据越多,性能就越差。
https://stackoverflow.com/questions/42724310
复制相似问题