Frage

Ich habe einen Kollegen, der in Opcode Caching / Zend Beschleunigung sucht (Ich habe immer davon ausgegangen, das ist die gleiche Sache) für unsere PHP-basierte Anwendung. Sein Benchmarks erscheinen, um anzuzeigen, dass wir nicht einen Leistungsvorteil zu sehen, wenn wir unsere (großen) Klassenbibliotheken mit require_once sind, aber wir haben den Performance-Vorteil sehen, wenn include_once verwenden.

Das riecht für uns beide faul, aber ich habe keine Zeit, in unsere Benchmark-Methodik zu überprüfen, mich und meine Kollegen mehr Toleranz für den Geruch von Fisch hat als ich. :)

Hat jemand schon einmal in so etwas laufen? Wenn nicht, keine Gedanken über andere Dinge, die das Aussehen einer Leistungssteigerung verursachen könnten durch von include_once zu require_once Schalen?

War es hilfreich?

Lösung

Für den Anfang, beiden Anrufe (require_once und include_once) double-check, ob eine Datei vor nicht enthalten ist.

So ist die Art und Weise sie beide dies zu erreichen ist, indem Sie die Datei in allen verfügbaren Pfaden suchen und im Wesentlichen durch die Überprüfung, ob es in der Mischung nicht gewesen etc hat ..

Im Hintergrund, was passiert, ist, dass sie alle die verschiedenen Optionen (zum Beispiel mehr include_path der usw.) auswerten und dann, indem die realpath von dieser Form abgekürzt sie eine eindeutige Kennung erstellen. Es gibt nur ein und denselben Weg -. Nicht zwei

Das ist schon nicht der schnellste Prozess auf dem Planeten und geschieht in der Regel auf jede Anfrage mit PHP. Dann fügen Sie eine weitere teure Operation, die die Statistik, wenn es schafft, was ich die genannt realpath (realpath, denn es ist eine Art, was realpath () der Fall ist) zu überprüfen, ob die Datei vorhanden ist.

mich korrigieren, wenn ich falsch bin, aber APC hat Optimierungen speziell für diesen Fall.

Wie auch immer - jetzt auf die Differenz zwischen require_once und include_once, das ist, dass require_once die Datei auswertet (für Low-Level Fehler analysiert, etc.), wenn es enthält es. Dies ist eine zusätzliche Prüfung, die Sie loswerden können, wenn Sie genug QA an der richtigen Stelle, die ein Parse-Fehler nie in eine Include schleichen kann.

Es ist nur heikel sonst zu finden. : -)

(Etwas zu prüfen. Sie könnten mit require_once entwickeln und alle Anrufe mit include_once ersetzen, wenn Sie einsetzen)

Wie für einen Opcode Cache - Ich würde empfehlen, APC . Es wurde vor über Stackoverflow diskutiert. Ich persönlich bin / wir verwenden es für eine Weile (wir behandeln rund 100k Besucher / Tag mit 3 Frontends und 1-Backend), und wir sind sehr glücklich. APC wird auch für den require_once / include_once Wahnsinn optimiert.

Ein ziemlich cool Nebeneffekt ist, dass APC ermöglicht es Ihnen auch PHP-Variablen im Speicher zu speichern - eine Art persistant, etc ..

Ein paar zusätzliche Hinweise:

  1. Anspruch Viele Menschen mit jeder Anwendung zu beschleunigen __autoload .
  2. mit einem Opcode-Cache vermeiden bedingt require_once / include_once (beispielsweise in Schlaufen oder in Steuer-flow).
  3. Einige Leute sagen, dass /absolute/path/to/file.php in include_ oder require_once ist schneller als auf dem include_path angewiesen zu sein.
  4. Die Reihenfolge der Pfade in include_path Angelegenheiten auch.

Ich hoffe, das hilft.

Andere Tipps

Ich kann nicht guarantuee nichts, da ich nicht tief genug in sie ausgesehen haben, aber ja, ich habe zwischen den beiden Geschwindigkeitsdifferenzen gesehen. Sie waren nie groß genug, um mich zu bewegen, wenn anstelle von require_once include_once.

Ich habe immer angenommen war der Unterschied, weil require_once mehr Arbeit unter Wasser zu tun hat. zumindest eine weitere mögliche Fehler für die Vorbereitung und Griff, und noch viel mehr zu tun, wenn die Datei nicht existiert erforderlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top