PHP ernsthaft beschleunigen?

8

Ich schreibe PHP seit Jahren und habe jedes Framework unter der Sonne benutzt, aber eine Sache hat mich immer nervt ... und das ist, dass das ganze verdammte Ding jedes Mal interpretiert und ausgeführt werden muss, wenn jemand meinem Server sagt Sie möchten, dass die Seite bedient wird.

Ich habe experimentiert mit Caching, FastCGI, der Zend Job Queue (und Symfony Plug-Ins, die ähnlich sind - sowie meinen eigenen DB-basierten Lösungen, die die System_Daemon-Klasse implementieren, um Hintergrundprozesse auszuführen) und die ich verwaltet habe um meine apps ziemlich schnell mit all diesen Sachen zu machen ... aber ich komme nicht über den mentalen Block, den meine Einstellungsdateien, System- / Umgebungsüberprüfungsfunktionen und all die Sachen, die wirklich nur EINMAL geladen werden sollten ... jeden laden verdammt Zeit, die jemand meine Seite schlägt.

Also, meine Wanderung führt zu folgendem Q -

Gibt es eine Methode / Methode um bestimmte Aspekte von PHP in RAM zu laden, so dass, wenn diese Seite angefordert wird, alle meine settings.yml Dateien, Systemchecks, Frameworkdateien, zwischengespeicherte Seiten usw. direkt aus dem Speicher geladen werden können die HD berühren ... oder 50.000 Mal pro Tag den gleichen Lademechanismus durchlaufen müssen, um das Programm zu starten?

Wenn es nichts in PHP gibt ... gibt es andere "Web" -Sprachen, die auf diese Weise kompiliert werden können, um echte Init-Once-Apps zu ermöglichen?

    
Lee Benson 21.11.2009, 08:49
quelle

6 Antworten

9

Ich denke, Sie sollten memcached ausprobieren, wenn Sie über das Zwischenspeichern von Daten sprechen. Ich denke PHP ist ziemlich geübt darin, kompilierte PHP-Seiten zwischenzuspeichern, wenn man Sachen wie mod_php in Apache benutzt (was nicht zwischen Anfragen stirbt).

    
falstro 21.11.2009, 09:01
quelle
8

Werfen Sie einen Blick auf APC (Alternativer PHP Cache) , es speichert einen Cache kompilierter Dateien (PHP Opcode) und lässt Sie auch speichern zufällige Variablen im Speicher mit apc_fetch, apc_store.

Die Installation ist sehr einfach und bringt wirklich einen Leistungsschub.

    
Felipe Ribeiro 21.11.2009 15:49
quelle
2

Erstellen Sie einen vollständigen Seitencache auf dem RAM-Datenträger und lassen Sie Ihren Webserver die Seite von dort aus bedienen. Dies ist eine Methode, die Wordpress Supercache-Plugin verwendet und es funktioniert gut, wenn Ihre Website für die vollständige Seite Caching geeignet ist. Dies bedeutet, dass Sie nicht einmal den PHP-Interpreter aufrufen.

Für Benutzer, die angemeldet sind (eine offene Sitzung haben), können Sie eine Umschreibungsbedingung erstellen, die ihre Anfrage an die PHP-Engine umleitet.

Verwenden Sie auch immer einen Opcode-Cache wie APC und verwenden Sie ihn zum Zwischenspeichern von Konfigurationsdateien (Memcache ist auch in Ordnung).

    
Goran Jurić 21.11.2009 09:13
quelle
1

Wenn Sie nach einem JVM / Tomcat ähnlichen Anwendungsserver fragen, lautet die Antwort wahrscheinlich nein. Meines Wissens gibt es für PHP so nichts (Nutzbares). PHP verwendet eine Shared-Nothing-Architektur, daher ist es so, dass alles auf allen Anfragen eingerichtet ist. Aber das macht PHP ziemlich gut skalierbar.

Um Ihre Apps zu beschleunigen, verwenden Sie memcached und code accelerator . Vielleicht schaue dir Zend Server an, um ein komplettes Paket zu erhalten.

    
Gordon 21.11.2009 09:18
quelle
0

Ich würde die Facebook Engineering-Seite ( Ссылка ) ab und zu im Auge behalten Sie kommen mit Posts darüber, wie sie Dinge schnell halten / optimieren / skalieren. Ich denke, dass die Verwendung von PHP ist sehr beeindruckend.

    
sjobe 22.11.2009 01:45
quelle
0

In Bezug auf Ihre letzte Frage glaube ich zumindest, dass die meisten Web-Frameworks von Python und Ruby so funktionieren.

Ruby-Webanwendungen sind heutzutage so aufgebaut, dass die App nur einmal pro Serverprozess initialisiert wird. Wenn Anfragen eingehen, übergibt der Server (z. B. Apache) diese an die Webanwendung (über die Rack -Schnittstelle), die auf dem Server ausgeführt wird Hintergrund.

So funktionieren Web-Frameworks, die auf Rack basieren. Ältere Versionen von Ruby on Rails waren ähnlich, obwohl sie eine andere Schnittstelle verwendeten, um mit dem Webserver zu kommunizieren.

    
hrnt 21.11.2009 11:02
quelle