Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 3 Caching
  gp 3.1 Cache_Lite
  gp 3.2 Cache
    gp 3.2.1 Cache_Function
    gp 3.2.2 Cache_Graphics
    gp 3.2.3 Cache_Output
    gp 3.2.4 Cache_OutputCompression
    gp 3.2.5 Cache_HTTP_Request

3 Caching

Webseiten, die auf PHP basieren, werden üblicherweise dynamisch generiert. In den meisten Fällen ist es nur leider so, dass die Seiten deutlich öfter berechnet werden, als das nötig wäre. Da kann es sehr ressourcenschonend sein, einmal generierte Daten zwischenzuspeichern.

Gehen wir von einem Telefonverzeichnis für eine Firma aus. Ist das Unternehmen nicht gerade ein Weltkonzern, werden sich die Namen und Telefonnummern nicht sekündlich ändern. Somit ist es überflüssig, die beinhalteten Daten bei jedem Aufruf aus der Datenbank auszulesen und die Seite neu zu generieren. Um die Systembelastung zu reduzieren, wäre es sicher ausreichend, die Seiten einmal am Tag zu generieren. An dieser Stelle kommen Cache-Pakete ins Spiel, die es Ihnen ermöglichen, die einmal generierten Daten zwischenzuspeichern. Wird eine Datei beim Server angefordert, prüft dieser also erst, ob die fertige Datei bereits gecacht ist. Ist das der Fall, sendet er sie direkt an den Client. Ist die Datei nicht vorhanden oder ist die gecachte Information bereits ungültig, wird die Seite neu erstellt, an den Client geschickt und im Cache abgelegt.

Bei der Arbeit mit Caches müssen Sie beachten, dass der Code, der zum Rendern einer Seite, zum Aufbau von Datenbankverbindungen, zum Öffnen von Dateien oder Ähnlichem notwendig ist, nur dann ausgeführt werden sollte, wenn das auch wirklich nötig ist – also nur dann, wenn die Seite neu berechnet werden muss.


Rheinwerk Computing

3.1 Cache_Lite  toptop


Besprochene Version: 1.3.1 Lizenz: LGPL
Klassendatei(en): Cache/Lite.php

Fabien Martys Cache_Lite ist ein kleines, leicht zu nutzendes Paket. Zwar ist Cache_Lite nicht sehr flexibel, aber für viele Einsatzfälle ist es absolut ausreichend. Das Paket ist in der Datei Cache/Lite.php enthalten und definiert zwei Klassen. Zum Ersten ist das die Klasse Cache_Lite, deren Konstruktor ein assoziatives Array mit Optionen übergeben bekommen kann. Die Schlüssel mit den entsprechenden Erläuterungen finden Sie in Tabelle 3.1.


Tabelle 3.1 Parameter zum Beeinflussen von Cache_Lite
Schlüssel Datentyp Beschreibung
cacheDir String Verzeichnis, in dem die Cache-Dateien abgelegt werden. Das Verzeichnis muss bereits existieren, und der Webserver benötigt Schreibrechte (Default: /tmp/).
caching Boolean Definiert, ob der Cache ein- oder ausgeschaltet ist (Default: true).
lifeTime Integer Gültigkeitsdauer eines gecachten Inhalts in Sekunden (Default: 3600)
fileLocking Boolean Definiert, ob die Dateien während des Zugriffs mit einem Lock belegt werden und somit gegen einen konkurrierenden Zugriff gesichert werden. Das kann verhindern, dass der Cache korrupte Daten ausliefert (Default:true).
writeControl Boolean Ist die writeControl eingeschaltet, können unter Umständen defekte Cache-Dateien entdeckt werden. Das verlangsamt das Schreiben der Daten ein wenig (Default: true).
readControl Boolean Definiert, ob die Daten nach dem Einlesen aus der Datei verifiziert werden sollen. Verlangsamt das Einlesen ein wenig (Default: true).
readControlType String Legt die Art der readControl fest. Zulässige Werte sind md5 (sehr sicher, aber langsam), crc32 (nicht ganz so sicher, aber schneller; Default) oder strlen (prüft nur die Länge, sehr schnell).
pearErrorMode Integer Legt das Verhalten im Fall eines Fehlers fest. CACHE_LITE_ERROR_RETURN definiert, dass ein PEAR_Error-Objekt zurückgegeben wird (Default). CACHE_LITE_ERROR_DIE legt fest, dass die Applikation abgebrochen wird.
fileNameProtection Boolean Mit true (Default) werden die Dateinamen auf Gültigkeit geprüft. false verhindert eine Prüfung, ist aber schneller.
automaticSerialization Boolean Bestimmt, ob Daten automatisch serialisiert werden. Kann genutzt werden, um Binärdaten zu speichern, ist aber langsamer (Default: false).
memoryCaching Boolean Definiert, ob die gecachten Daten (auch) im RAM abgelegt werden sollen (Default: false).
onlyMemoryCaching Boolean Legt fest, ob die gecachten Daten nur im RAM abgelegt werden sollen (Default: false).
memoryCachingLimit Integer Maximale Anzahl von Datensätzen, die im RAM abgelegt werden können.

Bevor ich auf die eigentliche Funktionsweise eingehe, möchte ich noch ein paar Besonderheiten des Pakets erwähnen. Die Klasse unterstützt die Möglichkeit, Daten im RAM abzulegen. Das erscheint aber nur begrenzt sinnvoll, da die Daten nur dem Script zur Verfügung stehen, das sie auch erzeugt hat, da sie nicht im Shared Memory, sondern in einem Array abgelegt werden. Daher werde ich darauf nicht eingehen.

Des Weiteren ist die Fehlerbehandlung in diesem Paket ein wenig anders geregelt. Die meisten Pakete inkludieren die Klasse PEAR zum Error-Handling. In diesem Fall ist es allerdings so, dass PEAR nur dann inkludiert wird, wenn ein Fehler auftritt. Das erhöht die Performance, hat aber den Nachteil, dass Sie die Rückgabewerte einer Funktion nicht mithilfe von PEAR::isError() prüfen können. Auch erscheint das Überprüfen aller Rückgabewerte nicht wirklich sinnvoll, wenn Sie die Performance einer Applikation steigern wollen. Somit würde ich Ihnen empfehlen, zum Debuggen den pearErrorMode auf CACHE_LITE_ERROR_DIE zu stellen. Wenn die Applikation dann ausreichend getestet ist, nutzen Sie wieder CACHE_LITE_ERROR_RETURN, um das Fehlerverhalten zu steuern, und hoffen, dass kein Fehler mehr auftritt.

Ein kleines Anwendungsbeispiel finden Sie in Listing 3.1.

require_once('Cache/Lite.php'); 
 
// Eindeutige ID fuer die Cache-Datei 
$id = '123'; 
 
// Optionen zum Steuern des Caches 
$optionen = array( 
               // Verzeichnis zum Speichern 
               'cacheDir' => './cache/', 
               // 6 Stunden Gueltigkeit 
               'lifeTime' => 21600, 
               // zum Debuggen einschalten 
               'pearErrorMode' =>CACHE_LITE_ERROR_DIE 
            ); 
 
$Cache_Lite = new Cache_Lite($optionen); 
 
// Testen, ob die Daten im Cache vorhanden sind 
if (!$daten = $Cache_Lite->get($id)) 
{  // Nein, Seite neu generieren 
 
   // Hier wird die Seite neu berechnet, 
   // und alle Daten landen in $daten. 
   // Zum Testen wird nur die Uhrzeit gespeichert 
 
   $daten=date("H:i:s"); 
 
   // Daten im Cache speichern 
    $Cache_Lite->save($daten,$id); 
} 
echo $daten;

Listing 3.1 Nutzung von Cache_Lite

Wie Sie in Listing 3.1 sehen können, benötigt das Paket eine eindeutige ID für jede Cache-Datei. Nach dem Ableiten eines neuen Objekts wird mithilfe der Methode get() versucht, die Cache-Datei einzulesen. Kann die Datei nicht gefunden werden oder ist ihr Inhalt inzwischen ungültig, liefert die Methode false zurück. In diesem Fall muss die Seite neu generiert werden. Alle Daten, die auf der Seite ausgegeben werden sollen, werden zuerst in einer Variablen zusammengefasst. Der Inhalt dieser Variable wird dann mithilfe der Methode save()abgespeichert, die als zweiten Parameter die ID übergeben bekommt. Die eigentlichen Daten werden dann erst in der letzten Zeile mit einem echo ausgegeben. Die beiden Methoden get() und save() unterstützen darüber hinaus noch einen weiteren Parameter, mit dem Cache-Dateien zu Gruppen zusammengefasst werden können. Dateien, die zu Gruppen zusammengefasst wurden, können dann z. B. gemeinsam gelöscht werden.

Da es teilweise ein wenig aufwändig ist, alle Daten in einer Variablen zu erfassen, unterstützt das Paket auch die Möglichkeit, Daten mithilfe des Output-Bufferings zu erfassen und dann zu speichern. Das hat den Vorteil, dass Sie die Daten wie gewohnt ausgeben können und das Paket sie automatisch für Sie erfasst.

require_once('Cache/Lite/Output.php'); 
 
// Setzen von $id und dem Array $optionen 
 
$Cache_Lite = new Cache_Lite_Output($optionen); 
 
// Testen, ob die Daten im Cache vorhanden sind, 
// und sie gegebenenfalls ausgeben 
if (!$Cache_Lite->start($id)) 
{  // Nein, Seite neu generieren 
 
   // Hier wird die Seite neu berechnet 
   // und alle Daten werden direkt ausgegeben 
 
   echo date("H:i:s"); 
 
   // Buffering beenden und Daten speichern. 
   $Cache_Lite->end(); 
}

Listing 3.2 Nutzung von Cache_Lite mit Ausgabe-Pufferung

Zur Nutzung der Ausgabe-Pufferung muss die Datei Cache/Lite/Output.php eingebunden werden. Der Konstruktor der Klasse heißt Cache_Lite_Output() und akzeptiert ein Array mit denselben Werten, die in Tabelle 3.1 beschrieben sind. Die Methode start() prüft, ob eine entsprechende Cache-Datei vorhanden ist. Sollte das der Fall sein, wird ihr Inhalt direkt ausgegeben. Andernfalls gibt die Methode den booleschen Wert false zurück und schaltet die Ausgabe-Pufferung ein. Das heißt, jede Ausgabe, die Sie an den Browser senden, wird nun gepuffert. In der letzten Zeile wird schließlich die Member-Funktion end() aufgerufen, die die gepufferten Daten einerseits zum Browser schickt und sie andererseits in einer Datei ablegt.

Beide Klassen unterstützen darüber hinaus das Löschen von bestehenden Cache-Dateien. Sie können entweder explizit eine Datei mit einer bestimmten ID mit der Methode remove() löschen, die die ID der Datei übergeben bekommt. Das kann hilfreich sein, wenn Sie das Erneuern einer Cache-Datei erzwingen wollen. Darüber hinaus ist clean() definiert. Wenn Sie diese Methode ohne Parameter aufrufen, werden alle Cache-Dateien gelöscht. Mit dem optionalen Parameter können Sie den Löschvorgang aber auch auf die Gruppe einschränken, deren Namen Sie übergeben.

 <<   zurück
     
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: PHP PEAR
PHP PEAR
Jetzt Buch bestellen!
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Rheinwerk-Shop: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Rheinwerk-Shop: MySQL 5.6






 MySQL 5.6


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern