2017-03-10 5 views
0

Ich habe eine Funktion in Symfony2, die ein Objekt ändert. Die Funktion kann das Objekt auf zwei Arten empfangen. Erstens kann das Objekt an die Funktion wie folgt übergeben werden:Symfony2: Find Objekt in Funktion vs übergeben Objekt an Funktion

public function myFunction(Object $myObject) 
    { 
     // Do something with $myObject 
    } 

Alternativ kann ein Objekt-ID (oder irgendein anderes Attribut) an die Funktion und verwendet übergeben werden, um das Objekt in der Funktion zu finden, wie folgt aus:

public function myFunction($id) 
    { 
     $myObject = $this->entityManager->getRepository('AppBundle\Entity\Object')->find($id); 
     // Do something with $myObject 
    } 

Funktional sind diese beiden Methoden gleichwertig. Meine Frage ist, wie unterscheiden sich diese beiden Methoden in ihrer Wirkung auf die Leistung der Anwendung? Ich weiß, dass die Anzahl der Datenbankabfragen für eine optimierte Leistung minimiert werden sollte. Wie also vergleichen sich die Leistungskosten einer zusätzlichen find() Abfrage mit den Leistungskosten eines Objekts an eine Funktion?

Antwort

1

Das Objekt an die Funktion übergeben ist immer leistungsfähiger. Seit PHP5 Objekte are passed by object identifier, very similar in concept to pass by reference.

Das heißt, das Abrufen eines einzelnen Datensatzes von Rohdaten aus der Datenbank ist relativ schnell. Nach meiner Erfahrung gibt es bei der Hydration (bei der die relationalen Daten, die aus der Datenbank abgerufen werden, in das zugeordnete Geschäftsobjekt umgewandelt werden) Engpässe. Marco Pivetta, leitender Entwickler von Doctrine, hat eine excellent post about this geschrieben.

Im Allgemeinen werden Sie unter normalen Umständen wahrscheinlich keinen Leistungsunterschied zwischen dem Übergeben eines Objekts und dem Hydratisieren eines einzelnen Objekts bemerken. Hydratisieren in Schleifen ist jedoch, wo Sie in Schwierigkeiten geraten. Je komplexer das Objekt und je mehr Daten Sie hydratisieren, desto schlechter ist die Leistung.

Verwandte Themen