(fourni
par )
Préparation
Le mécanisme de cache de PEAR fonctionne en mettant en cache
le résultat d'une fonction ou d'une page entière. C'est très
pratique, mais j'aime avoir une granularité fine. Il est possible
de résoudre un problème en quelques lignes de code plutôt
que par une fonction, et l'indépendance de ce code peut faire
la différence entre un cache efficace et une application avec
un problème en plus. Par exemple, si la fonction lente produit
des informations dont le contenu change souvent, comme avec
un nom d'utilisateur, mais que les autres données prennent
du temps pour être calculées, comme la bannière de publicité
citée ci-dessus, l'utilisation d'un cache de fonction n'est
tout simplement pas possible. La seule solution serait d'afficher
le nom de l'utilisateur A sur la page de B : ce n'est pas
concevable.
Ma solution à ce problème est de proposer un système de cache
qui soit complètement indépendant de la source de données.
Dans le pire des cas, le cache fonctionnera avec des variables.
Comme
vous pouvez le voir au listing
1, notre système de cache est constitué de deux de base
est constitué de deux fonctions, cache_cache()
et cache_get_cached_version().
Ainsi, la première fonction insère le contenu d'une variable
dans le cache, alors que la seconde lit des informations dans
le cache.
Les fonctions sont très simples, grâce au fait qu'elles ne
font que relayer les informations aux systèmes de stockage.
Il y a tout de même quelques points intéressants à noter.
Premièrement, le medium 'préféré' est déterminé par la première
lettre associée à chaque identifiant de variable. Par exemple,
nous allons utiliser l'identifiant F-ADPAGE1,
dont le contenu sera placé sur le disque, alors que M-ADPAGE1
sera stocké dans un segment de mémoire partagé.
Cela peut sembler un peu cavalier, mais si vous considérez
notre bibliothèque comme une extension d'une application existante,
alors il est primordial de pouvoir ajouter le cache très facilement
dans le code, et moins vous ajouterez de lignes, moins vous
perturberez votre application. La dépendance au format d'identifiant
est aussi mitigée par le fait que le système effectue différentes
vérifications avant d'effectuer la tâche.
Vous pourrez aussi noter les premières lignes de chaque fonction,
qui vérifient que si PHP dispose des fonctions de partage
de mémoire. Lorsque ce n'est pas le cas, la bibliothèque force
alors toujours les contenus sur le disque.
C'est effectivement un palliatif où le programme impose un
comportement malgré la commande du développeur. Cependant,
si vous appliquez la bibliothèque dans un projet PHP en cours,
l'extension SHM ne sera pas forcément installée, ni installable.
Elle n'est pas compilée par défaut, et au mieux, il vous faudra
une recompilation : ce n'est pas forcément le meilleur moment
pour cela. Vous pouvez aussi ajouter quelques commandes personnelles
dans cette partie, comme enregistrer un message ou vous envoyer
un courriel. En fonction de votre niveau de confiance dans
la bibliothèque, vous pouvez aussi afficher une erreur et
terminer le script : de cette manière, vous aurez un contrôle
absolu sur le comportement de la bibliothèque de cache. Il
reste à voir si vous voulez recompiler PHP ou changer le système
de stockage du cache.
|
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
Finalement, comme vous l'avez sûrement noté, j'utilise un
mécanisme de délai pour savoir si un fichier du cache est
encore valide. La raison à cela est que la bibliothèque est
conçue pour être légère, et simple à mettre en uvre. Ajouter
votre propre mécanisme de validation devrait être facile.
|