Fabrikklassen vs Schließungen in Zend Framework 2

8

Ist es besser, in Zend Framework 2 Factory-Klassen oder Closures zu verwenden und warum?

Ich weiß, dass Closures nicht serialisiert werden können, aber wenn Sie sie aus Modul # getServiceConfig () zurückgeben, hat das keinen Einfluss auf das Cachen Ihrer restlichen Konfigurationsdaten, und die Closures würden ohnehin in Ihrem Opcode-Cache zwischengespeichert / p>

Wie unterscheidet sich die Leistung beim Erstellen einer Factory-Klasse im Vergleich zum Ausführen eines Abschlusses? Spiegelt und instanziert PHP Schließungen nur, wenn Sie sie ausführen, oder würde dies bei jeder Schließung, die in Ihrer Konfigurationsdatei bei jeder Anfrage definiert ist, geschehen?

Hat jemand die Ausführungszeiten jeder Methode verglichen?

Siehe auch:

darkangel 20.10.2013, 15:26
quelle

1 Antwort

11

PHP konvertiert die anonymen Funktionen in Ihrer Konfiguration beim Kompilieren in Instanzen der Closing-Klasse, so dass dies bei jeder Anfrage geschieht. Dies ist ungleich create_function , wodurch die Funktion zur Laufzeit erstellt wird. Da Closures dies jedoch zur Kompilierungszeit tun, sollte es in Ihrem Opcache-Cache liegen und sollte daher keine Rolle spielen.

Im Hinblick auf die Auswirkungen auf die Leistung beim Aufbau eines Dienstes mit einem Werk gegen Schließung müssen Sie sich zunächst daran erinnern, dass der Dienst nur einmal pro Anfrage erstellt wird, unabhängig davon, wie oft Sie den Dienst anfordern. Ich habe einen schnellen Benchmark für das Abrufen eines Service mit einer Schließung und einer Fabrik erstellt und hier ist, was ich bekam (ich lief ein paar Mal und alle Ergebnisse hatten ungefähr den gleichen Wert):

%Vor%

Das sind Nanosekunden, d. h. 10 -9 Sekunden. Grundsätzlich ist der Leistungsunterschied so gering, dass es keinen effektiven Unterschied gibt.

Auch ZF2 kann die Konfiguration meines gesamten Moduls nicht mit Closures zwischenspeichern. Wenn ich reine Factories verwende, kann meine gesamte Konfiguration zusammengeführt, zwischengespeichert und eine einfache Datei kann bei jeder Anfrage gelesen werden, anstatt sich um das Laden und Zusammenführen von Konfigurationsdateien jedes Mal kümmern zu müssen. Ich habe den Leistungseinfluss nicht gemessen, aber ich denke, dass es auf jeden Fall marginal ist.

Jedoch bevorzuge ich Fabriken für hauptsächlich Lesbarkeit und Wartbarkeit. Bei Fabriken kommt man nicht mit einer riesigen Konfigurationsdatei mit vielen Verschlüssen überall hin.

Sicher, Closures sind großartig für eine schnelle Entwicklung, aber wenn Sie möchten, dass Ihr Code lesbar und wartbar ist, dann würde ich sagen, bleiben Sie bei den Fabriken.

    
Tomdarkness 21.10.2013, 00:00
quelle