Solution de cache PHP --> jpcache v2

WRInaute passionné
Bonjour à tous,

Loin de moi l'idée de vouloir concurrencer l'excellent script que vous propose fandecine, je souhaite juste vous présenter la solution de cache que je viens de mettre en place pour le site que je gère : jpcache v2.

Très simple à mettre en place, cette solution offre des gains d'utilisation de ressources assez impressionnants. Il n'est en place que depuis deux jours sur mon site, donc je ne peux pas vous donner un feedback perso (je ne sais même pas comment réaliser des benchmarks sur mon serveur BD... :oops: ), mais une petite recherche sur Google donne rapidement une idée des capacités de la bête.

De plus, jpcache utilise gzip pour encoder le contenu et alléger la taille des informations qu'il envoie au navigateur.

l'url : http://www.jpcache.com/

Traduction partielle du readme ( - pour les non-anglophiles) :

Pré-requis :
- PHP 4.1.0+ avec Zlib activé
- MySQL si vous utilisez la version SQL

Vous pouvez choisir entre stockage dans la BD ou dans des fichiers.

Installation :

0) Télécharger à l'adresse http://sourceforge.net/project/showfile ... _id=173955

1) Décider si vous utilisez le stockage MySQL ou fichier

2) Copier le dossier jpcache à la racine de votre site web

3) Modifier jpcache.php : supprimer $includedir qui ne sert à rien si vous copier le dossier tel quel.

4) Modifier jpcache-config.php pour les paramètres de configuration :

- décommenter le paramètre JPCACHE_TYPE correspondant à l'utilisation que vous faire (MysQL ou fichier)

- si vous choisissez le mode fichier pensez à renseigner correctement $JPCACHE_DIR, dossier qui contiendra les fichiers générés et à donner à Apache les droits d'écriture dessus

- si vous choisissez le mode SQL, renseigner les paramètres de connexion à la base (host, database, username, passwd, table). Vous trouverez dans le dossier jpcache, le fichier script.sql qui contient la requete a éxécuter pour créer la table (donc juste un copier-coller à faire sous phpMyAdmin).

5) Vous pouvez facilement tester jpcache, en créant un fichier test.php dans le dossier jpcache :
Code:
       <?php
        require "jpcache.php";
        echo time();
        phpinfo();
       ?>

Appelez la page dans votre navigateur, puis actualisez, si la date affichée n'a pas changé, c'est bon, jpcache fonctionne.

5) Pour mettre en place jpcache sur votre site, il suffit de rajouter au début de chaque page php :

Code:
<? $cachetimeout=600; require "/path/to/jpcache/jpcache.php" ?>

$cachetimeout étant la durée en secondes pendant laquelle la page est conservée dans le cache.
- si elle est égale à -1, la page ne sera jamais mise en cache, mais le contenu sera envoyé en compressé, ce qui est déjà un gain de bande passante et de temps de chargement.
- si elle est égale à 0, le cache de cette page n'expirera jamais. Ce qui est très utile pour les pages statiques très lourdes.

Il est possible de mettre en cache la valeur des POST avec la page, d'activer/désactiver le cache, la compression des pages, le mode debug, très simplement dans jpcache-config, c'est juste des variables à passer à 0 (off) ou 1(on).

Voilà, je rajouterais une petite précision perso, j'ai eu un problème dans mon cas car j'ai une css pour ie et une autre pour tous les autres navigateurs.
J'ai donc créer deux tables pour stocker le cache dans ma BD car si la page a été mise en cache sous Firefox, et qu'elle est appellée après depuis IE, elle aura le css de firefox, comme tout est mis en cache.

Donc c'set juste une petite condition à rajouter :
Code:
 if (ereg("MSIE", getenv("HTTP_USER_AGENT"))){
        	 $JPCACHE_DB_TABLE     = "cache_ie"; // Table that holds the data - IE pages
	}
	else{
	      	 $JPCACHE_DB_TABLE     = "cache_moz"; // Table that holds the data - Moz pages
	}

Profitez-en bien ! :)
 
WRInaute impliqué
C'est un tres bon script que j'utilise et conseille regulierement.

Une remarque tout de meme, pour filer vite comme l'eclair, utilises plutot l'option fichier pour le cache.
 
WRInaute passionné
Au choix :

- mode fichier : plus rapide

- mode SQL : "it has much faster garbagecollection" ( je ne me lancerais dans une traduction française médiocre avec des histoires de "ramasses-miettes"... :) ). La mise à jour des tables d'allocation de mémoire est plus rapide en mode SQL, donc à voir selon les besoins.
 
WRInaute impliqué
perso j'utilise Pear Cache_Lite,

pour des XML, des "homepage"[1] et autres pages à fort "trafic/demande", je pense que c'est presque indispensable.



[1]page d'accueil
 
WRInaute passionné
guicara a dit:
As quoi sert ces genres de scripts ?
Sur un mutualiste sa le fait ?

Ca evite d'appeler le php et d'effectuer des requetes à chaque consultation de page dynamique.
L'internaute se connecte au site, il appelle donc la page index.php, php est appelé, il effectue des appels à la BD si nécessaire. Si la page est mise en cache pour 1 heure, pendant 1 heure, tous le sinternautes qui se connecteront à index.php, "recevront" dans leur navigateur la page en cache, donc pas besoin de réxécuter le php, ni les requetes vers la BD. --> gain de ressources plus ou moins important selon la longueur du script et surtout selon le nombre et la taille des requetes effectuées sur la BD.

Je pense que jpcache peut s'uiliser sans problème sur un mutualisé, car c'est juste du php.
 
WRInaute accro
Bonjour,
Je confirme.
Seul reproche, cela gère l'intégralité de la page d'où la necessité de passer par des includes lorsque l'on ne veut pas que la totalité de la page soit mise ne cache.
La sauvegarde sur fichier est de point de vue la plus utile effectivement.
 
WRInaute passionné
Donc la page est mise en page X heures, minutes... ?
Avec cet outil, peux ont vider le cache ? Est il lourd ?
Faut-il mettre un code sur chaque page ?...
 
WRInaute passionné
guicara a dit:
Donc la page est mise en page X heures, minutes... ?
Avec cet outil, peux ont vider le cache ? Est il lourd ?
Faut-il mettre un code sur chaque page ?...

X c'est des secondes

vider cache : Si MySQL, tu vides la table ; si fichier, tu vides le dossier temp

2 lignes à rajouter sur les pages que tu as besoin de mettre en cache
 
WRInaute passionné
Problème:

J'ai copier les pages a la racine de mon site,
Mis le fichier type a la racine et créer un dossier cache, pour le cache.

fichier test:
-http://www.graphiques-kits.com/test.php

Comprend pas !
 
WRInaute discret
si si mais jpcache.php appel un autre fichier de config qui lui n'est pas à l'emplacement attendu : evidement ca n'est pas forcement aussi simple qu'expliqué dans le readme mais c'est tout de même très pratique comme outil je trouve.
 
WRInaute passionné
dadovb a dit:
guicara a dit:
Oui c'est pas supert facile, j'ai fait ce que tu as dit:
http://www.graphiques-kits.com/jpcache/test.php

Fatal error: main() [function.require]: Failed opening required '/jpcache-config.php' (include_path='.:/usr/local/lib/php') in /homepages/num/blabla/htdocs/jpcache/jpcache.php on line 6

Fais moi voir le code de ton fichier test.php.

:arrow:

dadovb a dit:
5) Vous pouvez facilement tester jpcache, en créant un fichier test.php dans le dossier jpcache :
Code:
       <?php
        require "jpcache.php";
        echo time();
        phpinfo();
       ?>

:roll:

De plus il demande d'indiquer ou sera le fichier du cache

jpcache-config.php a dit:
/**
* File based caching setting.
*/
$JPCACHE_DIR = "/cache"; // Directory where jpcache must store
// generated files. Please use a dedicated
// directory, and make it writable

J'ai mis cache, et créer ce dossier dans le dossier jpcache/cache
Est ce bien çà ? Faut t'il le mettre à la racine de son site ?

Merci !
 
WRInaute passionné
Voilà comc'est organisé chez moi :

il y a un dossier jpcache/ à la racine de mon site qui contient tout dont le fichier test.php.

Dans ce cas, il faut juste mettre :

Code:
require jpcache.php;

dans ton fichier test.php.

Si ton fichier test.php est à la racine et que jpache est dans son dossier jpcache à la racine, il faudra mettre :

Code:
require jpcache/jpcache.php;

Enfin, c'est un peu des bases de programmation ça...

Tu dois lui indiquer où se trouvent les fichiers c'est tout...
 
WRInaute passionné
Je sais, c'est ce que j'ai fait:
require "jpcache.php"; avec mon fichier test.php dans le dossier

Ce qui est étonnant:
Fatal error: main() [function.require]: Failed opening required '/jpcache-config.php' (include_path='.:/usr/local/lib/php')
 
WRInaute passionné
guicara a dit:
Je sais, c'est ce que j'ai fait:
require "jpcache.php"; avec mon fichier test.php dans le dossier

Ce qui est étonnant:
Fatal error: main() [function.require]: Failed opening required '/jpcache-config.php' (include_path='.:/usr/local/lib/php')

Là ya un problème, il ne va pas la chercher dans le dossier jpcache/ mais à la racine, essaye en mettant le chemin absolu peut-etre...
 
WRInaute discret
conseil: utiliser l'option de compression GZIP fait gagner 20 a 40% de rapidité en +. (en gros le fichier cache est compressé et c'est pas le serveur mais le navigateur qui le décompresse)
 
WRInaute passionné
sepang a dit:
conseil: utiliser l'option de compression GZIP fait gagner 20 a 40% de rapidité en +. (en gros le fichier cache est compressé et c'est pas le serveur mais le navigateur qui le décompresse)

+1

Effectivement comme je l'explique plus haut, jpcache a deux utilités :
- mise en cache
- compression des pages

Donc même sans utiliser la mise en page, on gagne du temps de chargement et de la bande passante.
 
WRInaute passionné
Tester sur différents serveurs, toujours la même erreur.
Sa ne veux pas marcher.

Peux tu me fournir le code source des page jpcache + config pour voir si je ne me suis pas tromper par azart ;)
 
WRInaute impliqué
lol

dadovb a dit:
De plus, jpcache utilise gzip pour encoder le contenu et alléger la taille des informations qu'il envoie au navigateur.
super ! mais çà c'est vraiment nul !
puisque vace une ligne dans le php.ini (pour ceux en dédié) ou une ligne dans le htaccess (pour tout le monde) on gzippe l'ensemble des fichiers (css, js, php, html, jpg, png ...) sur le serveur ...

c'est donc résolument sans intérêt aucun !
 
WRInaute accro
Re: lol

Albert1 a dit:
dadovb a dit:
De plus, jpcache utilise gzip pour encoder le contenu et alléger la taille des informations qu'il envoie au navigateur.
super ! mais çà c'est vraiment nul !
puisque vace une ligne dans le php.ini (pour ceux en dédié) ou une ligne dans le htaccess (pour tout le monde) on gzippe l'ensemble des fichiers (css, js, php, html, jpg, png ...) sur le serveur ...

c'est donc résolument sans intérêt aucun !
hihi je suis intéressé.
quel est cette ligne pour le htaccess (même pour le php.ini cela peut être intéressant). merci.
 
WRInaute passionné
Pour en revenir au script, j'ai tester pleins de fois ne marche pas sur différents serveur ! Et je ne suis pas le seul, lancez une petite recherche sur google...
 
WRInaute accro
Re: lol

thierry8 a dit:
Albert1 a dit:
dadovb a dit:
De plus, jpcache utilise gzip pour encoder le contenu et alléger la taille des informations qu'il envoie au navigateur.
super ! mais çà c'est vraiment nul !
puisque vace une ligne dans le php.ini (pour ceux en dédié) ou une ligne dans le htaccess (pour tout le monde) on gzippe l'ensemble des fichiers (css, js, php, html, jpg, png ...) sur le serveur ...

c'est donc résolument sans intérêt aucun !
hihi je suis intéressé.
quel est cette ligne pour le htaccess (même pour le php.ini cela peut être intéressant). merci.
 
WRInaute accro
bon je sais je suis chiant :)

mais je pense que depuis tout ce temps tu as du lire ce post Albert1 :wink:

si tu pouvais partager la technique permettant de transmettre en gzip simplement en ajoutant qq ligne en htaccess ça serait cool :D
 
WRInaute passionné
+ 1

Nous avons les moyens de vous faire parler !
Même s'il faudra user de la force !
Ha a a (rire sadique)

:mrgreen:
 
WRInaute discret
La voir c'est un truc, savoir si elle fonctionne s'en est une autre...

Comme j'ai des soucis de consommation sql, je voudrais être sûr que ça marche correctement

Et impossible de vérifier les logs sql vu que je suis en mutualisé

Greg
 
WRInaute passionné
Mais pour ta page de test, suffit de prendre un script php qui affiche l'heure, tu la met en cache et tu regarde, non ?
 
WRInaute discret
Bon ça y est je pense y être arrivé.

J'ai finalement opté pour la version fichier et j'ai bien des fichiers qui s'affichent dans mon répertoire tmp.

Par contre, je m'intérrogeais sur les options suivantes :

Code:
$JPCACHE_DEBUG        =   0;   // Turn debugging on/off
$JPCACHE_IGNORE_DOMAIN=   1;   // Ignore domain name in request(single site)
$JPCACHE_ON           =   1;   // Turn caching on/off
$JPCACHE_POST         =   0;   // Should POST's be cached (default OFF)
$JPCACHE_GC           =   1;   // Probability % of garbage collection
$JPCACHE_CLEANKEYS    =   0;   // Set to 1 to avoid hashing storage-key:
                                   // you can easily see cachefile-origin.

0 pour désactiver et 1 pour activier. Ok Mais a quoi servent-elles ?

Greg
 
WRInaute discret
Toutes mes félicitation pour ton script.

mais si je peux me permettre un recommandation par rapport au dossier de cache il serait bien de rajouté cette instruction dans ton fichier de conf.
Code:
	if(!is_dir($JPCACHE_DIR."/")){
		mkdir($JPCACHE_DIR."/",0777);
		chmod($JPCACHE_DIR."/",0777);
	}

Comme ça cela évite les gens d'être bloqué parce que on ne pense pas toujours a crée les dossiers ;)

Ou sinon un petit message pour indiqué que le dossier de cache n'existe pas ;)

Encore merci pour ton super boulot
 
WRInaute discret
Par contre je viens de constater que ton cache on ne peux pas l'utilisé dans un main (fichier central qui gère tous le site.)

Par exemple dans mon site http://jeux-gratuit.wullix.com comme dans beaucoup de site pro tout passe par une main y a pas forcément un fichier php par url. (Peut-etre j'ai commis une erreur dans la gestion de ton script?)

Je vais voir si je peux remasterisé un peu les choses pour influencé la création du cache en fonction des url des pages si ca t'intérresse je t'envoi la modif ;).

As- tu songé une migration vers de l'objet de ton appli ?

Merci
 
WRInaute impliqué
mitus a dit:
Par contre je viens de constater que ton cache on ne peux pas l'utilisé dans un main (fichier central qui gère tous le site.)

Par exemple dans mon site -- comme dans beaucoup de site pro tout passe par une main y a pas forcément un fichier php par url. (Peut-etre j'ai commis une erreur dans la gestion de ton script?)

C'est quoi pour toi un main ? (je veux dire concrètement)
 
WRInaute discret
Salut screuscreu,


Souvent dans les applications, tout passe par un contrôleur centrale du site qui va gérer l'appel des différent fichier php gérer les templates etc... Et on peut l'appeler soit le moteur du site. Ou souvent dans le jargon une main (Traduction de main => principal).

En occurrence pour des sites avec des rewrites au lieu de s'embêter avec trop de rewrite tu envoie tout sur une main qui elle gère le fait d'appeler le bon fichier de script, de tpl, etc... Cela aide beaucoup pour le développement MVC (Modèle - Vue - Contrôleur)

Autre exemple pour faire du stats au lieu d'inclure du scripts dans tous les fichiers php ta main va tout géré.

Les avantages d'une main sont nombreuses. ;)

Tu voyais les choses comment?
 
Discussions similaires
Haut