Utiliser PEAR pour tamponner les programmes PHP
La mise en mémoire tampon est un sujet brûlant dans le monde PHP, car les pages dynamiques générées par PHP doivent être recalculées à chaque fois que l'utilisateur le demande, que le résultat de la requête soit le même ou non. En même temps, PHP compile le script à chaque fois. Une telle surcharge serait certainement insupportable pour un site web à fort trafic. Heureusement, les résultats du Web peuvent être mis en cache sans qu'il soit nécessaire de réexécuter et de compiler le script. Des produits commerciaux comme ZendCache ou l'Alternate PHP Cache open source offrent un moyen de compiler des scripts PHP en code octet et de les mettre en cache.
Le package de mise en mémoire tampon de PEAR fournit un cadre pour la mise en mémoire tampon du contenu dynamique, des requêtes de base de données et des appels de fonctions PHP.
Tout comme Perl a CPAN et TeX a CTAN, PHP possède également sa propre bibliothèque de ressources centrale pour stocker les classes, les bibliothèques et les modules. Cette bibliothèque s'appelle PEAR (PHP Extension and Add-On Repository).
Cet article suppose que vous avez installé l'environnement PEAR. Sinon, vous pouvez le télécharger depuis le site PHP. Le package tampon de PEAR contient une classe tampon globale et plusieurs sous-classes spécialisées. Les classes tampon utilisent des classes conteneurs pour stocker et gérer les données mises en mémoire tampon.
Voici les conteneurs actuellement contenus dans le tampon PEAR et leurs paramètres respectifs :
file — Le conteneur de fichiers stocke les données mises en mémoire tampon dans le système de fichiers et est le conteneur le plus rapide.
cache_dir — Il s'agit du répertoire dans lequel le conteneur stocke les fichiers.
filename_prefix — Le préfixe des fichiers mis en cache, par exemple : "cache_".
shm — Le conteneur shm place les données mises en mémoire tampon dans la mémoire partagée. Les tests montrent qu'avec l'implémentation actuelle, ce conteneur est plus lent que le conteneur de fichiers.
shm_key — La clé utilisée par la mémoire partagée.
shm_perm — Autorisation d'utiliser des segments de données de mémoire partagée.
shm_size — taille de la mémoire partagée allouée.
sem_key — La valeur clé du sémaphore.
sem_perm — Autorisations pour le sémaphore.
db — La couche d'abstraction de la base de données de PEAR.
dsn — Le DSN de la connexion à la base de données. Vous pouvez vous référer à la documentation DB de PEAR.
cache_table — Le nom de la table.
phplib — Le conteneur phplib utilise une couche d'abstraction de base de données pour stocker les tampons.
classe_db
fichier_bd
chemin_bd
fichier_local
chemin_local
ext/dbx - Extension de couche d'abstraction de base de données PHP Si vous souhaitez stocker des tampons dans la base de données, vous pouvez utiliser ce conteneur.
module
hôte
base de données
nom d'utilisateur
mot de passe
cache_table
persistant
L'amélioration des performances obtenue en utilisant PEAR Cache dépend du conteneur tampon que vous choisissez. Par exemple, cela n'a aucun sens de stocker à nouveau les résultats de la base de données dans le cache de la base de données.
Le module tampon de fonctions de PEAR Cache peut mettre en mémoire tampon les résultats de n'importe quelle fonction ou méthode, qu'il s'agisse d'une fonction intégrée de PHP ou d'une fonction définie par l'utilisateur. Il utilise par défaut un conteneur de fichiers et place les données mises en mémoire tampon dans un répertoire appelé function_cache.
Le constructeur de la classe Cache_Function peut avoir trois paramètres facultatifs :
$container : Le nom du conteneur de tampon.
$container_options : paramètres de tableau du conteneur tampon.
$expires : la durée (en secondes) pendant laquelle l'objet tampon expire.
Lorsqu'un appel de fonction normal utilise la méthode call() de la classe Cache_Function, la mise en mémoire tampon peut être déclenchée. Appeler call() est simple, un argument est le nom de la fonction, puis les arguments de la fonction, le deuxième argument est la première des fonctions à appeler, et ainsi de suite, regardons un exemple :
Exemple 1 Appel de fonctions et de méthodes de tampon
//Appelle le tampon de fonction de PEAR Cache.
require_once 'Cache/Fonction.php';
// Définir certaines classes et fonctions.
classe foo {
barre de fonctions ($test) {
echo "foo::bar($test)
" ;
}
}
barre de classe {
fonction foobar ($ objet) {
echo '$'.$objet.'->foobar('.$objet.')
';
}
}
$bar = nouvelle barre ;
fonction foobar() {
echo 'foobar()';
}
// Récupère l'objet Cache_Function
$cache = nouveau Cache_Function();
// Buffere la fonction statique bar() de la classe foo (foo::bar()).
$cache->call('foo::bar', 'test');
// $bar->foobar()
$cache->call('bar->foobar', 'bar');
$cache->call('foobar');
?>
Ci-dessous, nous utilisons Cache_Output pour tamponner la sortie :
Exemple 2 : Sortie du script de mise en mémoire tampon
//Charger le tampon de sortie du cache PEAR
require_once 'Cache/Output.php';
$cache = new Cache_Output('file', array('cache_dir' => '.') );
// Calcule la marque de la page à mettre en mémoire tampon, on suppose que la mise en mémoire tampon de la page dépend de
// Variables URL, HTTP GET et POST et cookies.
$cache_id = $cache->generateID(
array('url' => $REQUEST_URI, '
post' => $HTTP_POST_VARS, 'cookies' => $HTTP_COOKIE_VARS) );
// Tampon de requête
si ($content = $cache->start($cache_id)) {
// accès au tampon
echo $contenu ;
mourir();
}
//tampon perdu
// -- Insérez le contenu ici pour générer du code --
// Stocke la page dans le buffer
echo $cache->end();
?>
Grâce à la classe Cache_Output, il est facile de convertir une application de site Web dynamique basée sur une base de données en une application statique, améliorant ainsi considérablement les performances du site. De plus en plus de sites utilisent GZIP pour compresser le contenu HTML, ce qui réduit la consommation de bande passante du serveur et peut également être très avantageux pour les utilisateurs qui utilisent un modem pour accéder à Internet.
Cache_OutputCompression étend les fonctionnalités de la classe Cache_Output. Il met en mémoire tampon le contenu HTML compressé GZIP, économisant ainsi le temps de compression du processeur.