Auswahl einer PHP-Caching-Technik: Caching in Dateien ausgeben gegen Opcode-Caching

8

Ich habe von zwei Caching-Techniken für den PHP-Code gehört:

  1. Wenn ein PHP-Skript eine Ausgabe generiert, speichert es diese in lokalen Dateien. Wenn das Skript erneut aufgerufen wird, prüft es, ob die Datei mit der vorherigen Ausgabe vorhanden ist, und gibt den Inhalt dieser Datei zurück. Es ist meistens mit dem "Ausgabepuffer" gespielt. So etwas wird in diesem Artikel beschrieben.

  2. Verwenden Sie eine Art Opcode-Caching-Plugin, in dem der kompilierte PHP-Code gespeichert wird. Das beliebteste von diesem ist APC, auch eAccelerator.

Nun stellt sich die Frage, ob es sinnvoll ist, beide Techniken zu verwenden oder nur eine davon zu verwenden. Ich denke, dass die erste Methode in der Implementierung ein wenig kompliziert und zeitraubend ist, wenn die zweite Methode einfach zu sein scheint und man nur das Modul installieren muss.

Ich benutze PHP 5.3 (PHP-FPM) unter Ubuntu / Debian.

Übrigens, gibt es noch andere Methoden, um PHP-Code oder Ausgaben zu cachen, die ich hier nicht erwähnt habe? Sind sie eine Überlegung wert?

    
PHPguy 27.01.2011, 21:17
quelle

5 Antworten

7

Sie sollten immer einen Opcode-Cache wie APC haben. Sein Zweck ist, das Parsen Ihres Codes zu beschleunigen, und wird in einer zukünftigen Version in PHP gebündelt. Fürs Erste ist es eine einfache Installation auf jedem Server und Sie müssen weder Code schreiben noch ändern.

Caching-Opcodes machen jedoch nichts, um die tatsächliche Ausführung Ihres Codes zu beschleunigen. Ihre Engpässe sind in der Regel Zeit, die Sie mit Datenbanken verbringen oder von / zur Festplatte lesen. Wenn Sie die Ausgabe Ihres Programms zwischenspeichern, vermeiden Sie unnötige Ressourcennutzung und können Reaktionen um Größenordnungen beschleunigen.

Sie können das Ausgabe-Caching auf viele verschiedene Arten an vielen verschiedenen Orten entlang Ihres Stapels durchführen. Der erste Ort, an dem Sie es tun können, ist Ihr eigener Code, wie Sie es vorgeschlagen haben, indem Sie die Ausgabe puffern, in eine Datei schreiben und bei nachfolgenden Anfragen aus dieser Datei lesen.

Dies erfordert jedoch weiterhin die Ausführung Ihres PHP-Codes bei jeder Anfrage. Sie können die Ausgabe auf Web-Server-Ebene zwischenspeichern, um diese ebenfalls zu überspringen. Durch das Erstellen einer Reihe von mod_rewrite-Regeln kann Apache die statischen Dateien anstelle des PHP-Codes bereitstellen, wenn sie vorhanden sind. Sie müssen die zwischengespeicherten Versionen jedoch manuell oder mit einer geplanten Aufgabe neu generieren, da Ihr PHP-Code nicht ausgeführt wird jede Anfrage dazu.

Sie können auch einen Proxy vor Ihren Webserver setzen und diesen zum Zwischenspeichern der Ausgabe verwenden. Varnish ist heutzutage eine beliebte Wahl und kann hunderte mal mehr Anfragen pro Sekunde mit Caching ausführen als Apache mit Ihrem PHP-Skript auf dem gleichen Server. Der Cache wird auf der Proxy-Ebene erstellt und konfiguriert. Wenn er abläuft, wird die Anforderung an Ihr Skript weitergeleitet, das so ausgeführt wird, als würde es normalerweise die neue Version der Seite generieren.

    
Dan Grossman 27.01.2011 21:34
quelle
2

Sie wissen, dass optcache, filecache .. etc nur für die Reduzierung von Datenbankaufrufen verwendet werden. Sie können Ihren Code nicht beschleunigen. Sie verbessern jedoch die Seitenauslastung, indem Sie einen Cache verwenden, um Ihre Besucher zu bedienen.

Bei mir ist APC gut genug für VPS oder Dedicated Server, wenn ich Widgets zwischenspeichern muss, $ object, um meinen mySQL Server zu speichern.

Wenn ich mehr als 2 Server habe, benutze ich gerne Memcache , sie sind gut darin, Speicher zum Zwischenspeichern zu verwenden. Aber es liegt an Ihnen, nicht jedem wie memcached, und nicht jeder wie APC.

Zum Cachen der gesamten Webseite habe ich eine Menge Wordpress ausgeführt, und ich habe APC, Memcache, Filecache auf einigen Cache Plugins wie W3Total Cache verwendet. Und ich sehe (mein eigenes exp): Filecache ist gut für die Zwischenspeicherung der gesamten Website, Speichercache ist gut für das Caching $ -Objekt

Filecache erhöht Ihre CPU, wenn Ihre Festplatte langsam ist, und der Memory-Cache ist schrecklich, wenn Sie nicht genügend Speicher auf Ihrem VPS haben.

Eine SSD-Festplatte ist super schnell, um eine Datei zu lesen / schreiben, aber der Speicher ist immer schneller. Jedoch kann der Mensch nicht sehen, was der Unterschied zwischen diesen Geschwindigkeiten ist. Sie wählen nur eine Methode basierend auf Ihrem Projekt und Ihrem Server (RAM, HDD) oder sind Sie auf einem freigegebenen Webhosting?

Wenn ich auf einem Shared Hosting bin, ohne Root-Berechtigung, ohne php.ini, verwende ich gerne phpFastCache , es ist eine einfache Datei Cachemethode mit set, get, stats, nur löschen.

Außerdem verwende ich .htaccess, um statische Dateien wie Bilder, js, css oder HTML-Header im Cache zu speichern. Sie helfen Besuchern dabei, Ihre Seite zu beschleunigen und die Bandbreite Ihres Servers zu sparen.

Und wenn Sie .htaccess verwenden können, um in den statischen .html Cache umzuleiten, wenn Sie die ganze Seite zwischenspeichern, ist das eine großartige Sache.

In Zukunft wird APC oder irgendein Optcache in die PHP-Version gebündelt, aber ich bin mir sicher, dass der gesamte Cache Ihren Code nicht beschleunigen kann, dafür verwenden sie:

  1. Datenbank- / Abfrageaufrufe reduzieren.
  2. Verbessern Sie die Geschwindigkeit beim Laden der Seite, indem Sie den Cache für die Bereitstellung verwenden.
  3. Speichern Sie Ihre API-Transaktionen (wie Bing) oder cURL-Anfragen ...

usw. ...

    
Ken Le 30.04.2013 20:24
quelle
0

Wenn es um PHP-Webanwendungen geht, ist die Datenbank oft der Flaschenhals. Daher können Sie mit memcached am besten Ergebnisse im Speicher zwischenspeichern. Sie können auch etwas wie xhprof verwenden, um Ihren Code zu profilieren und sich wirklich einzuschalten, was am meisten Zeit kostet.

    
mfonda 27.01.2011 21:53
quelle
0

Ja, das sind zwei verschiedene Cache-Techniken, und Sie haben sie richtig verstanden.

aber hüte dich vor 1):

1.) Durch das Caching-Skript generierte Ausgabe in Dateien oder Proxies kann zu Problemen führen wenn der Inhalt sich schnell ändert.

2.) x-cache existiert auch und ist einfach auf ubuntu zu installieren.

Grüße, / t

    
Teson 27.01.2011 21:57
quelle
0

Ich weiß nicht, ob das wirklich funktionieren würde, aber ich stieß auf ein Performance-Problem mit einem PHP-Skript, das ich hatte. Ich habe eine einfache Textdatei, die Daten als Titel und eine URL-Registerkarte speichert, die mit jedem Datensatz getrennt durch eine neue Zeile getrennt ist. Mein Skript erfasst die Datei unter jeder URL und speichert sie in einem eigenen Ordner.
Dann habe ich eine andere Seite, die tatsächlich die lokalen Dateien anzeigt (in diesem Fall Bilder) und ich benutze preg_replace() , um die Ausgabe jeder Zeile von der entfernten URL zu einer relativen zu ändern, so dass sie vom Server angezeigt werden kann. Meine Tab-getrennte Datei ist jetzt über 1 MB und es dauert ein paar Sekunden, um die preg_replace() zu tun, also entschied ich mich, in Ausgabe-Caching zu schauen. Ich konnte nichts Definitives finden, also dachte ich, ich würde es selbst ausprobieren und hier ist, was ich herausgefunden habe:

Wenn ich die Seite anfordere, den Inhalt lokal anzuzeigen, versuche ich ihn aus einer Variablen in einem globalen Bereich zu lesen. Wenn dies leer ist, wurde diese Anwendung möglicherweise noch nicht ausgeführt und diese globale Angabe muss ausgefüllt werden. Wenn es leer war, lesen Sie aus einer Ausgabedatei (einfache HTML-Datei, die buchstäblich alles zur Ausgabe zeigt) und speichern Sie den Inhalt in der globalen Variable und zeigen Sie dann die Ausgabe aus dem globalen.
Wenn das Skript jetzt ausgeführt wird, um die durch Tabs getrennte Datei zu aktualisieren, aktualisiert es die Ausgabedatei und die globale Variable. Auf diese Weise wird der Teil des Skripts, der das langsam laufende Objekt ausführt, nur ausgeführt, wenn die Daten aktualisiert werden.

Jetzt habe ich das noch nicht probiert, aber theoretisch sollte dies meine Leistung stark verbessern, obwohl es das Skript tatsächlich noch ausführt, aber die Daten würden nie veraltet sein und ich sollte eine viel bessere Ladezeit bekommen .

Hoffe, das hilft.

    
FFVison 08.03.2012 21:47
quelle