Aller au contenu

Système de cache en PHP


Sujets conseillés

Posté

J'utilise la méthode du journaldunet sur plusieurs sites, c'est nickel !

J'ajoute un cron de nettoyage du cache quand c'est nécessaire, donc après une mise à jour de la base.

Posté

Bonjour,

je vais profiter pour apprendre le principe du cache... si j'ai bien compris, on récupère les fichiers html à la sortie du serveur pour en faire des copies dans le but d'éviter de faire un appel à la base de données à chaque fois... J'ai bon?

Mais faut pas faire ça comme un bourrin, sinon on peut se retrouver avec énormément de fichiers...

Posté

Tout bon :)

Tu stockes la page html dans le cache et les fois suivante, si elle existe tu fais que la relire. Mais ce n'est valable que sur des pages dans le contenu n'a pas évolué. A chaque mise à jour de ta base, tu passes un coup de balai dans le cache et le tour est joué.

Posté (modifié)

Salut,

Moi j'utilise, depuis 1 an maintenant, le moteur de templates Smarty

http://smarty.php.net

C'est une classe php qui sert non-seulement à gérer très facilement des templates, et donc à séparer le code php de la mise en page et design, mais il y a biensur un système de caches, entièrement paramettrable (durée de vie du cache, id du cache, etc...) pour chaque page générée....

Gestion de boucles dans le template même, conditions, etc...

Très pratique et facile à apprendre (en 1 semaine je maitrisais parfaitement la bête, en auto-didacte)

En plus il y a une doc en français sur le site officiel :)

Enfin voilà, je pense qu'il est inutile d'essayer de ré-inventer la roue, alors qu'il existe des outils déjà très performants et complets, bien plus que ce qu'on pourrait faire par soit-même.

A+

Zodd

Modifié par Zodd
Posté

Zodd,

De ce que je comprends du cache de Smarty (que je viens de visiter, çà à l'air très bien, merci du lien), il ne s'agit que d'une gestion de cache pour la partie template et non la partie développeur.

Posté
Zodd,

De ce que je comprends du cache de Smarty (que je viens de visiter, çà à l'air très bien, merci du lien), il ne s'agit que d'une gestion de cache pour la partie template et non la partie développeur.

Qu'apelles-tu caches du côté développeur?

Smarty créée des page html générée par tes script php, et permet une mise en cache de ces page html, ce n'est pas ce que tu voulais?

Posté

Oui mais en lisant la doc, je comprends que le cache n'est géré que pour le code html obtenu à partir des templates mais pas les calls d'appels au template.

Posté
Oui mais en lisant la doc, je comprends que le cache n'est géré que pour le code html obtenu à partir des templates mais pas les calls d'appels au template.

Tu voudrais pouvoir faire quoi concrètement? (exemple?)

Posté

J'essaye de t'expliquer ma compréhension:

Un exemple, tu as deux parties:

Partie développeur

index.php avec le code php qui va chercher des infos dans la base et qui fait les assign qui vont bien puis qui finit par un display de index.tpl

Partie graphiste

index.tpl c'est par exemple le code du template utilisé ci-dessus

Donc si tu actives le cache dans le code de index.php pour le template index.tpl, j'ai compris (arrête-moi si je fais une erreur) que au lieu de recalculer le template, il envoie une version qu'il a déjà compilé par ailleurs. On utilise donc le cache pour cette partie mais pas pour le code de index.php qui lui est toujours exécuté.

Posté (modifié)

Dans ton index.php tu crées une condition de ce style :

if(!$Smarty->is_cached('index.tpl', $compile_id)) {
// Page pas en cache
} else {
// Page en cache
}

Je ne sais pas si ça répond à ta question, car je suis pas sûr d'avoir bien cerné ou tu voulais en venir. :)

Mais ce n'est pas parce qu'une page est compilée qu'on ne peut pas éxecuter de code php 'hors caches'....

Maintenant si rien que le fait qu'il y ait du code php éxecuté te dérange, tu peux à la limite créer tes pages en html pur à l'aide de :

$var=$Smarty->fetch('index.tpl');

qui récupère la page html compilée et la met dans $var; ! Et à partir de là tu traites comme tu veux...

Zodd

Modifié par captain_torche
Posté

if(!$Smarty->is_cached('index.tpl', $compile_id)) {
...

OK c'est çà qui me manquait et qui me chagrinait dans ce qui était proposé. Donc grâce à ce test tu peux éviter de débouler un code inutile. Ca roule.

Merci pour la patience, mais j'ai lu la doc en 5 minutes :cool:

Posté

Bonjour,

Perso, si l'on recherche une solution déjà opérante, je conseillerai tinybutstrong qui est très puissant et simple et qui a un système de cache facile à implémenter.

Ci dessus ma version qui me permet de gérer page par page si elles doivent être mis en cache.

/*  creation du fichier en cache   */
if ($page_caching == '1'){
include_once('inc/plugins/tbs_plugin_cache.php');
$TBS->PlugIn(TBS_INSTALL,TBS_CACHE,$CacheDir,$CacheMask);
$TBS->PlugIn(TBS_CACHE,$CacheName,$CacheTime);
}

Dans ma page, je défini la variable $page_caching = '1' ou '0'

$CacheTime qui défini la durée de vie de la page en cache est défini pour tous le site dans un fchier config.php mais je peux le redéfinir dans les varaibles de ma page si je veux un délai plus court pour une page de news par exemple.

$CacheDir est le répertoire de stockage des fichier de cache, défini dans le fichier config.php

$CacheName est le nom du fichier de cache générer. perso je le génère de cette façon :

/*  Page informations   */
$page_url = $_SERVER["REQUEST_URI"];
$CacheName = str_replace('/','_',$page_url);

$CacheMask permet de définir une convention de nommage des fichier de cache

Voila. Bon vous pouvez aller voir sur tinybutstrong.com c'est en français car crée et maintenu par un français.

Aour

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...