Verwendung von PEAR zum Puffern von PHP-Programmen
Pufferung ist ein heißes Thema in der PHP-Welt, da die von PHP generierten dynamischen Seiten jedes Mal neu berechnet werden müssen, wenn der Benutzer sie anfordert, unabhängig davon, ob das Anforderungsergebnis dasselbe ist. Gleichzeitig kompiliert PHP das Skript jedes Mal. Eine solche Überlastung wäre für eine Website mit hohem Traffic sicherlich unerträglich. Glücklicherweise können die Ergebnisse des Webs zwischengespeichert werden, ohne dass das Skript erneut ausgeführt und kompiliert werden muss. Kommerzielle Produkte wie ZendCache oder der Open-Source-Alternate-PHP-Cache bieten eine Möglichkeit, PHP-Skripte in Bytecode zu kompilieren und zwischenzuspeichern.
Das Pufferpaket von PEAR bietet ein Framework zum Puffern dynamischer Inhalte, Datenbankabfragen und PHP-Funktionsaufrufe.
So wie Perl über CPAN und TeX über CTAN verfügt, verfügt auch PHP über eine eigene zentrale Ressourcenbibliothek zum Speichern von Klassen, Bibliotheken und Modulen. Diese Bibliothek heißt PEAR (PHP Extension and Add-On Repository).
In diesem Artikel wird davon ausgegangen, dass Sie die PEAR-Umgebung installiert haben. Andernfalls können Sie sie von der PHP-Website herunterladen. Das Pufferpaket von PEAR enthält eine Gesamtpufferklasse und mehrere spezialisierte Unterklassen. Pufferklassen verwenden Containerklassen zum Speichern und Verwalten gepufferter Daten.
Im Folgenden sind die derzeit im PEAR-Puffer enthaltenen Container und ihre jeweiligen Parameter aufgeführt:
Datei – Der Dateicontainer speichert gepufferte Daten im Dateisystem und ist der schnellste Container.
Cache_Verzeichnis – Dies ist das Verzeichnis, in dem der Container Dateien speichert.
filename_prefix – Das Präfix der zwischengespeicherten Dateien, zum Beispiel: „cache_“.
shm – Der shm-Container legt gepufferte Daten im gemeinsam genutzten Speicher ab. Benchmarks zeigen, dass dieser Container mit der aktuellen Implementierung langsamer ist als der Dateicontainer.
shm_key – Der vom gemeinsam genutzten Speicher verwendete Schlüssel.
shm_perm – Berechtigung zur Nutzung von Shared-Memory-Datensegmenten.
shm_size – Größe des zugewiesenen gemeinsamen Speichers.
sem_key – Der Schlüsselwert des Semaphors.
sem_perm – Berechtigungen für das Semaphor.
db – PEARs Datenbankabstraktionsschicht.
dsn – Der DSN der Datenbankverbindung. Weitere Informationen finden Sie in der DB-Dokumentation von PEAR.
Cache_table – Der Name der Tabelle.
phplib – Der phplib-Container verwendet eine Datenbankabstraktionsschicht zum Speichern von Puffern.
db_class
db_file
db_path
lokale_Datei
local_path
ext/dbx – PHPs Datenbank-Abstraktionsschicht-Erweiterung Wenn Sie Puffer in der Datenbank speichern möchten, können Sie diesen Container verwenden.
Modul
Gastgeber
db
Benutzername
Passwort
Cache_Tabelle
hartnäckig
Die durch die Verwendung von PEAR Cache erzielte Leistungsverbesserung hängt vom gewählten Puffercontainer ab. Beispielsweise ist es sinnlos, die Datenbankergebnisse erneut im Datenbankcache zu speichern.
Das Funktionspuffermodul von PEAR Cache kann die Ergebnisse jeder Funktion oder Methode puffern, unabhängig davon, ob es sich um die integrierte Funktion von PHP oder eine benutzerdefinierte Funktion handelt. Es verwendet standardmäßig einen Dateicontainer und legt die gepufferten Daten in einem Verzeichnis namens function_cache ab.
Der Konstruktor der Cache_Function-Klasse kann drei optionale Parameter haben:
$container: Der Name des Puffercontainers.
$container_options: Array-Parameter des Puffercontainers.
$expires: Die Zeit (in Sekunden), in der das Pufferobjekt abläuft.
Wenn ein normaler Funktionsaufruf die Methode call() der Klasse Cache_Function verwendet, kann eine Pufferung ausgelöst werden. Der Aufruf von call() ist einfach. Ein Argument ist der Name der Funktion, dann die Argumente der Funktion, das zweite Argument ist die erste aufzurufende Funktion usw. Schauen wir uns ein Beispiel an:
Beispiel 1 Aufruf von Pufferfunktionen und -methoden
//Rufen Sie den Funktionspuffer von PEAR Cache auf.
require_once 'Cache/Function.php';
// Definiere einige Klassen und Funktionen.
Klasse foo {
Funktionsleiste($test) {
echo "foo::bar($test)
";
}
}
Klassenleiste {
Funktion foobar($object) {
echo '$'.$object.'->foobar('.$object.')
';
}
}
$bar = neuer Balken;
Funktion foobar() {
echo 'foobar()';
}
// Holen Sie sich das Cache_Function-Objekt
$cache = new Cache_Function();
// Puffern Sie die statische Funktion bar() der Klasse foo (foo::bar()).
$cache->call('foo::bar', 'test');
// $bar->foobar()
$cache->call('bar->foobar', 'bar');
$cache->call('foobar');
?>
Im Folgenden verwenden wir Cache_Output, um die Ausgabe zu puffern:
Beispiel 2 Pufferung der Skriptausgabe
//Laden Sie den Ausgabepuffer des PEAR-Cache
require_once 'Cache/Output.php';
$cache = new Cache_Output('file', array('cache_dir' => '.') );
// Berechnen Sie die Markierung der Seite, die gepuffert werden soll. Wir gehen davon aus, dass die Pufferung der Seite davon abhängt
// URL, HTTP-GET- und POST-Variablen und Cookies.
$cache_id = $cache->generateID(
array('url' => $REQUEST_URI, '
post' => $HTTP_POST_VARS, 'cookies' => $HTTP_COOKIE_VARS) );
// Abfragepuffer
if ($content = $cache->start($cache_id)) {
//Puffertreffer
echo $content;
sterben();
}
//Puffer verloren
// -- Inhalt hier einfügen, um Code zu generieren --
// Die Seite im Puffer speichern
echo $cache->end();
?>
Mithilfe der Cache_Output-Klasse ist es einfach, eine dynamische datenbankgesteuerte Website-Anwendung in eine statische zu konvertieren und so die Leistung der Website erheblich zu verbessern. Immer mehr Websites verwenden GZIP zum Komprimieren von HTML-Inhalten, was den Bandbreitenverbrauch des Servers reduziert und auch für Benutzer, die über Modem auf das Internet zugreifen, von großem Nutzen sein kann.
Cache_OutputCompression erweitert die Funktionalität der Cache_Output-Klasse. Sie puffert GZIP-komprimierte HTML-Inhalte und spart so CPU-Komprimierungszeit.