Die Wahl eines PHP-caching-Technik: output-caching in Dateien vs. opcode caching
Ich habe gehört, der zwei caching-Techniken für PHP-code:
-
Wenn ein PHP-Skript erzeugt die Ausgabe speichert Sie in lokalen Dateien. Wenn das Skript erneut aufgerufen, es zu überprüfen, ob die Datei mit früheren Ausgabe vorhanden ist, und wenn der Wert true gibt den Inhalt dieser Datei. Es ist vor allem mit spielen rund um die "output buffer". So etwas wie dies beschrieben ist in diese Artikel.
-
Mit einer Art von opcode caching-plugin, wo die kompilierten PHP-code wird im Speicher gespeichert. Die beliebtesten dieser ist APC auch eAccelerator.
Nun stellt sich die Frage, ob es sinnvoll ist, beide zu verwenden der Techniken, oder benutzen Sie einfach eine von Ihnen. Ich denke, dass die erste Methode ist ein bisschen kompliziert und langwierig in der Umsetzung, wenn die zweite zu sein scheinen, eine einfache, wo müssen Sie nur installieren Sie das Modul.
Ich verwende PHP 5.3 (PHP-FPM) auf Ubuntu/Debian.
BTW, gibt es irgendwelche anderen Methoden-cache, PHP-code oder die Ausgabe, die ich nicht hier erwähnen? Sind Sie eine überlegung Wert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie immer einen opcode-cache wie APC. Sein Zweck ist, um die Geschwindigkeit der Analyse des Codes, und werden gebündelt in PHP in einer zukünftigen version. Für jetzt, es ist eine einfache Installation auf einem beliebigen server und erfordert nicht schreiben oder ändern von code.
Jedoch caching-opcodes nicht alles tun, um die Geschwindigkeit der eigentlichen Ausführung des Codes. Ihre Engpässe sind in der Regel verbrachte Zeit zu reden-Datenbanken oder Lesen auf/von der Festplatte. Zwischenspeichern der Ausgabe des Programms vermeidet unnötigen Ressourcenverbrauch und beschleunigen Reaktionen um ein Vielfaches.
Können Sie tun Zwischenspeichern der Ausgabe, viele verschiedene Arten an vielen verschiedenen Orten entlang Ihrem Stapel. Der erste Ort, den Sie tun können, ist es in Ihrem eigenen code, wie Sie vorgeschlagen, durch die Pufferung der Ausgabe, schreib es in eine Datei und Lesen aus Datei auf nachfolgende Anfragen.
Dass noch erfordert die Ausführung von PHP-code auf jede Anfrage, allerdings. Sie können cache Ausgabe an den web-server-Ebene zu überspringen, die als gut. Crafting eine Reihe von mod_rewrite Regeln ermöglichen es den Apache zu dienen, die statische Dateien, anstatt den PHP-code, wenn Sie vorhanden sind, aber Sie haben, um sich zu regenerieren die zwischengespeicherten Versionen manuell oder mit geplanten tasks, da Ihr PHP-code nicht ausgeführt werden, auf jede Anfrage zu tun.
Können Sie auch kleben Sie einen proxy vor Ihrem web-server verwenden, um cache-Ausgabe. Lack ist eine beliebte Wahl in diesen Tagen, und kann dazu dienen Hunderte von mal mehr Anfragen pro Sekunde mit Zwischenspeichern als Apache laufen, PHP-Skript auf dem gleichen server. Der cache wird erstellt und konfiguriert der proxy-Ebene, also, wenn es abläuft, wird die Anfrage durchläuft, um Ihr Skript, welches ausgeführt wird, wie es normalerweise zu generieren, die neue version der Seite.
ob_start
oder nur APC auf seine eigene? Ich lese Ihre Antwort nun, ich fragte eine andere Frage, ähnliches Thema hier im Fall sind Sie interessiert bei der Beantwortung: stackoverflow.com/questions/9977442/...Wissen Sie, für mich, optcache , filecache .. etc nur für Datenbank-Aufrufe reduzieren.
Sie können nicht beschleunigen Sie Ihren code. Jedoch, Sie verbessern das laden der Seite durch die Verwendung von cache zu dienen Ihre Besucher.
Mit mir, APC ist gut genug für VPS oder Dedicated Server, wenn ich brauche, um cache-widgets, $Objekt zu speichern, mein mySQL-Server.
Wenn ich mehr als 2 Server, die ich gerne verwendet Memcache , Sie sind gut auf der Verwendung von Speicher für den cache. Allerdings ist es bis zu Ihnen, nicht jeder wie memcached, und nicht jeder wie APC.
Für die Zwischenspeicherung von ganzen web-Seite, ich lief eine Menge von wordpress, und ich verwendet, APC, Memcache, Filecache auf einige Cache-Plugins wie W3Total Cache. Und ich sehe ( meine eigene exp ): Filecache ist gut für die Zwischenspeicherung ganze website, cache-Speicher ist gut für die Zwischenspeicherung $Objekt
Filecache wird steigern Sie Ihre CPU, wenn die Festplatte zu langsam ist, und der cache-Speicher ist schrecklich, wenn Sie nicht über genügend Arbeitsspeicher auf Ihrem VPS.
Einer SSD Festplatte super gute Geschwindigkeit zum Lesen /schreiben der Datei, aber der Speicher ist immer schneller. Jedoch, Menschen können nicht sehen, was ist der Unterschied zwischen diesen Geschwindigkeiten. Sie Holen nur eine Methode, die Basis, auf Ihr Projekt und Ihren server ( RAM, HDD ) oder bist du auf einem shared-web-hosting?
Wenn ich auf einem shared-hosting ohne root-Berechtigung, ohne php.ini, ich möchte phpFastCache es eine einfache Datei-cache-Methode mit set -, get -, stats, nur löschen.
Außerdem, ich mag zu verwenden .htaccess cache von statischen Dateien wie Bildern, js -, css-oder html-Header. Sie helfen den Besuchern speed up your-Seite, und speichern Ihre server Bandbreite.
Und Wenn Sie verwenden können .htaccess Umleitung zu statisch .html-cache wenn Sie die ganze Seite cache ist eine tolle Sache.
In Zukunft, APC oder einige Optcache werden Bündel in der PHP-version, aber ich bin sicher, alle der cache kann nicht beschleunigen Sie Ihren code, die Sie verwenden, um:
etc...
Eine Menge Zeit, wenn es um PHP-web-Anwendungen, die Datenbank ist der Flaschenhals. Als solche, eine der besten Dinge, die Sie tun können, ist die Verwendung memcached cache, um die Ergebnisse im Speicher. Sie können auch so etwas wie xhprof zu Profil, Ihren code, und wirklich dial-in auf, was nimmt die meiste Zeit.
Ja, das sind zwei verschiedene cache-Techniken, und du hast Sie richtig verstanden haben.
aber Vorsicht, auf 1):
1.) Caching-Skript erzeugte Ausgabe auf Dateien oder proxies kann render Probleme
wenn Inhalte rasch ändern.
2.) x-cache existiert auch und ist einfach zu installieren auf ubuntu.
Grüße,
/t
Ich weiß nicht, ob das wirklich funktionieren würde, aber stieß ich auf ein performance-problem mit einem PHP-Skript, das ich hatte. Ich habe eine text-Datei, die speichert die Daten als ein Titel und eine URL, tab-getrennt, jeder Datensatz getrennt durch eine neue Zeile. Mein script packt die Datei bei jeder URL und speichert Sie in einem eigenen Ordner.
Dann habe ich noch eine Seite, die wirklich zeigt die lokalen Dateien (in diesem Fall Bilder) und ich benutze ein
preg_replace()
ändern Sie die Ausgabe der einzelnen Zeile aus der remote-url, um eine relative, so dass es sein kann, angezeigt durch den server. Meine tab-getrennte Datei ist jetzt über 1 MB und es dauert ein paar SEKUNDEN Zeit, um diepreg_replace()
, also beschloss ich, schauen Sie in die Ausgabe Zwischenspeichern. Ich konnte nicht finden, dass irgendetwas definitives, also dachte ich, ich würde versuchen, meine eigene hand bei Ihr und hier ist, was ich kam mit:Wenn ich die Seite anfordern, anzeigen stuff lokal, ich versuche, es zu Lesen aus einer variable im globalen Bereich. Wenn diese leer ist, könnte es sein, dass diese Anwendung noch nicht ausgeführt noch und dieser Globale Bedarf aufgefüllt. Wenn es leer war, Lesen Sie eine Ausgabe-Datei (Reine html-Datei, die buchstäblich alles zeigt zum Ausgang) und speichern den Inhalt auf die Globale variable und dann wird die Ausgabe angezeigt, die von der globalen.
Nun, wenn das Skript ausgeführt wird, aktualisieren Sie die tab-getrennte Datei, aktualisiert Sie die Ausgabe-Datei und die Globale variable. Dieser Weg, der Teil des Skripts, die tatsächlich das Zeug, zu langsam läuft nur, wenn die Daten aktualisiert wird.
Nun habe ich dies noch nicht ausprobiert, aber theoretisch sollte meine Leistung steigern viel, obwohl es eigentlich noch das Skript ausgeführt, aber die Daten würden nie aus der Datum, und ich sollte eine viel bessere Ladezeit.
Hoffe, das hilft.