PHP5 Frameworks: Autoloading und Opcode Caching

9

Eine Reihe von Frameworks verwenden spl_autoload_register() für das dynamische Laden von Klassen (d. h. Controller und Modelle). Es gibt ein paar Posts zum Thema Autoloading und Opcode-Caching. Ein Beitrag hat insbesondere eine Antwort von @cletus, die @Rasmus referenziert, indem er eine Anzahl von Anweisungen erstellt, die sich als unappetitlich für diejenigen erweisen, die APC als Opcode-Cache verwenden:

Es scheint keine Diskussion über mögliche Alternativen zum Autoloading zu geben, die die Opcode-Cache-Leistung nicht beeinflussen.

Gibt es eine Möglichkeit, die Tatsache zu umgehen, dass automatisch geladene Klassen nicht zum Bytecode-Cache hinzugefügt werden?

Wenn nicht, gibt es alternative Methoden zum dynamischen Laden von Klassen, die zwischengespeichert werden?

    
Corey Ballou 21.12.2009, 17:42
quelle

1 Antwort

5

Es scheint immer noch Verwirrung über dieses Thema zu geben, aber in den meisten Fällen kommt es auf die Leichtigkeit vs Leistung.

Ein guter Mailinglisten-Thread zum Lesen wäre dieser in der Zend Frameworks Mailingliste:

Ссылка

  

Nun ist die Korrelation hier, denn wenn Sie von noch nicht definiert erben   Klasse, können Sie sich auf Autoload verlassen, um es zu definieren (obwohl Sie auch könnten   verlassen sich auf), und tatsächlich das Vorhandensein der Autoload-Einrichtung kann   ermutigen Sie, solche Vererbung zu verwenden. Aber das ist nicht das Autoload   Das bringt Ärger (siehe Ramus '"es ist nicht nur Autoload" in der   Blog für einige Beispiele von lästigen Dingen).   Der richtige Satz wäre also "Leute, die sich eher auf Autoload verlassen   auch um Code zu verwenden, der die Kompilierzeitbindung verbietet. "Was nicht gesehen werden kann   als Autoload-Fehler natürlich, und einfach Autoload zu vermeiden wird nicht helfen a   Bit damit - Sie müssten auch Ihren Code neu schreiben, so dass   Compile-Time-Bindung könnte passieren. Und es hat nichts mit Verwendungen von   Autoload mit zum Beispiel "neu".

     

Was die Verlangsamung von den oben beschriebenen Wirkungen anbetrifft - d.h. Abwesenheit von   die Compile-Time-Bindung - der Code wird tatsächlich ein bisschen langsamer und so   Code kann in einigen obskuren Fällen zu einigen Schwierigkeiten führen, Caches zu opcodieren   (nicht in den Autoload-Fällen - aber in Fällen, in denen Klassen definiert sind   innere Bedingungen oder, Gott bewahre, wird eine andere Definition geschaffen   je nach Zustand) - aber es hat mit der Verwendung so gut wie nichts zu tun   Autoload von selbst.   Die Höhe der Verlangsamung scheint jedoch stark von   Leute - es ist nichts (und ich wiederhole es klar zu sein - NOTHING ) verglichen   zu dem Leistungsvorteil durch den Opcode-Cache aufgrund der Abwesenheit gegeben   der Datenträgeroperationen und der Kompilierungsstufe. Das könntest du wahrscheinlich   komponieren Sie eine künstliche Benchmark, die einige signifikante zeigen würde   Verlangsamung, aber ich glaube nicht, dass eine echte Anwendung es überhaupt bemerken würde.

     

Quelle: Ссылка

    
Eric Coleman 22.12.2009, 13:36
quelle