Frage

Ich habe mit Schienen, merb, django und asp.net MVC-Anwendungen in der Vergangenheit. Was sie gemeinsam haben (die auf die Frage relevant ist) ist, dass sie Code haben, dass Sätze auf Rahmen. Dies bedeutet in der Regel Objekte und Zustand zu schaffen, bis der Web-Server beibehalten wird zurückgeführt wird (wie die Einrichtung Routing oder die Überprüfung, die Steuerungen zur Verfügung stehen, usw.).

Soweit ich weiß, PHP ist mehr wie ein CGI-Skript, das zu einem gewissen Bytecode kompiliert wird jedes Mal, wenn der Lauf, und nach dem Wunsch es verworfen. Natürlich können Sie Sitzungen haben, um Daten zwischen den Anfragen von demselben Benutzer bestehen bleiben, und wie ich sehe, gibt es Erweiterungen wie APC, mit dem Sie Objekte zwischen Anfragen auf Server-Ebene bestehen können.

Meine Frage ist: Wie kann man erstellen PHP-Anwendung, das funktioniert wie Schienen und so? Ich meine, eine Anwendung, die auf der ersten Anfragen richten den Rahmen, dann auf den zweiten und späteren Anforderungen die Objekte verwenden, die bereits eingerichtet sind. Gibt es einige im Caching-Anlage in Mod_php gebaut? (Zum Beispiel, dass speichern die kompilierten Bytecode der ausgeführten PHP-Anwendungen) oder unter Verwendung von APC oder einer ähnlichen Erweiterung des einzigen Weg, um dieses Problem zu lösen? Wie würden Sie es tun?

Danke.

EDIT: Alternative Frage: Wenn ich eine große PHP-Anwendung, die eine sehr große Rüstzeit, aber kleinere Zeit läuft (wie in den Gerüsten oben erwähnt), dann wie soll ich „Cache“ die Dinge, die bereits oben gesetzt (dies könnte eine Menge Dinge bedeuten, außer vielleicht die Datenbankverbindungen, da für, dass Sie persistente Verbindungen in PHP haben bereits).

Um große Rüstzeit zu rechtfertigen: Was, wenn ich PHP Reflexion bin mit zu überprüfen, welche Objekte zur Verfügung und stellen Sie die Laufzeit nach, dass. langsam ist in der Regel viel Reflexion zu tun, aber man muss es nur einmal tun (und neu zu bewerten nur dann, wenn der Quellcode geändert wird).

EDIT2: Es scheint, es ist APC dann. Die Tatsache, dass es zwischenspeichert Bytecode automatisch ist gut zu wissen.

War es hilfreich?

Lösung

Nicht sicher, ob APC die einzige Lösung ist aber APC tut kümmern sich um alle Ihre Fragen.

Als erstes Skript wird einmal mit APC kompiliert werden und die Bytecode wird im Speicher gespeichert.

Wenn Sie etwas nehmen lange Zeit, zu haben, können Sie auch als Benutzerdaten in APC-Cache. Zum Beispiel habe ich tun dies die ganze Zeit,

            $table = @apc_fetch(TABLE_KEY);

            if (!$table) {
                    $table = new Table(); // Take long time
                    apc_store(TABLE_KEY, $table);
            }

Mit APC, die Aufgabentabelle zu schaffen, nur einmal pro Serverinstanz ausgeführt wird.

Andere Tipps

PHP (und Rubin für diese Angelegenheit) sind interpretierende Sprachen. Das ist analysieren sie die Dateien jedes Mal, wenn sie angefordert werden, und ich nehme an, Sie zu einem Pseudo-Bytecode umgewandelt sagen konnte. Es ist mehr ‚offensichtlich‘ könnte man sagen, dass PHP das ist mehr wie als etwa RoR aber beide verhalten sich die gleiche Weise.

Die Merkmalsdaten zwischen den Anfragen von persistierenden ist eine Funktion des Servers nicht von der Sprache selbst. Zum Beispiel das Routing der RoR sprechen Sie ist in der Tat zwischengespeichert, sondern dass in den Server des lokalen Speicher zwischengespeichert. Es ist nicht für eine schnellere readins zusammengestellt und gespeichert. Der Server (und Server meine ich sowohl die Box & die Web-Service-Instanzen) startet diese Informationen weg. Die ‚Einrichtung der Rahmen‘ Sie sprechen noch beinhaltet jede Datei im Rahmen beteiligt Parsen. Rails analysiert jede Datei während der Anforderung immer wieder, diese Daten im Speicher der Produktionsebene Funktionen in der Tat Cache kann aber sicherlich in der Entwicklung ist es nicht. Der einzige Grund, warum ich das erwähnen, weil es zeigt, dass es sich um eine Funktion des Servers ist nicht die Sprache.

Um die gleiche Sache in PHP erreichen Sie Zend Server nutzen könnten. Soweit ich weiß, das ist die einzige PHP-Interpreter, den Willen ‚Kompilierung‘ und die Verwendung Byte-Code, wenn gesagt. Andernfalls müssen Sie einen Weg finden, um die Daten zu speichern, die Sie über Anfragen bestehen bleiben sollen. APC, wie Sie ein sehr mächtiges Feature erwähnt wird, eine verteilte ein Memcached ist und dann Verlauf gibt es hartnäckige Formen wie Disc & sql.

Ich bin interessiert zu wissen, warum Sie dieses besondere Merkmal möchten. Sind Sie Performance-Probleme zu bemerken, dass dadurch wäre ‚gelöst‘?

Ich glaube, Sie einige falschen Verallgemeinerungen machen. Alle diese Frameworks (zB: Rails ) kann mit verschiedenen Konfigurationen ausgeführt werden. Unter einigen, wird ein Prozess für jede Anforderung erstellt. Dies schadet offensichtlich Leistung, aber es zeigt, dass diese Rahmenbedingungen stützen sich nicht auf lange laufenden Prozess. Sie können Dinge (reparse Konfigurationsdateien, Erstellen von Objekten, etc.) festgelegt, jede Anfrage, wenn nötig.

Natürlich mod_php (die Art und Weise PHP in der Regel verwendet wird) läuft innerhalb des Web-Server-Prozesses, im Gegensatz zu CGI. So sehe ich etwas grundlegend anders zwischen CakePHP (zum Beispiel) nicht und Rails.

Ich denke, vielleicht suchen Sie so etwas wie Python WSGI oder Ruby Rack-, aber für PHP. Gibt eine Schnittstelle (unabhängig davon, wie die Sprache ausgeführt wird) für eine Anwendung. Für eine neue Anfrage wird eine neue Instanz eines Anwendungsobjekt erstellt. Soweit ich weiß, gibt es diese nicht für PHP.

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