Connectix Boards
Bienvenue, vous n'êtes pas connecté. ( Se connecter - S'enregistrer )
Dernière version sortie: 0.8.4!
Venez tester la version 1.0 beta
Connectix Boards > Vous et votre forum Connectix Boards > Support > [Doc] Utiliser le cache de CB
| Ishimaru Chiaki | #1 18/07/2010 - 21h41 |
|
Groupe : Doc-rédacteur Hors ligne Site Web |
Lorsque l'on crée un CMS ou un site perso en PHP, on doit s'assurer que le script soit optimisé autant du côté client que du côté serveur.
Dans le cas de CB, l'un des moyens d'optimisation côté serveur qui est utilisé est l'utilisation d'un système de cache, qui s'avère très utile pour économiser des requêtes SQL là où les infos changent peu fréquemment, puisque cela peut faire toute la différence sur un site à fort trafic comme Directwind. Ce système de cache est utilisé notamment pour la liste des groupes dans la légende, la configuration générale du forum, les smileys, les modérateurs et la structure. Toutes ces infos changent si peu souvent que l'utilisation du cache est très avantageuse dans ce cas. Il est donc très utile de pouvoir utiliser le système de cache si on veut coder un MOD qui est très exigeant en requêtes SQL comme une page de statistiques par exemple. Je vais donc vous montrer les bases de l'utilisation. Fonctionnement du cache L'utilisation du cache repose sur les fonctions serialize() et unserialize(). La première permet de conserver une variable de type array (tableau) sous forme d'une chaîne linéaire de celle-ci, tandis que la deuxième permet de récupérer cette variable dans sa forme d'origine. Pour plus de détails sur ces deux fonctions, je vous invite à lire ce tutoriel dédié à ces deux fonctions Initialiser notre fichier de cache Avant de travailler sur la mise en cache, il est essentiel de l'initialiser d'abord, pour indiquer quel fichier créer ou modifier. Ouvrez donc le fichier include/lib/lib.cb.php et trouvez ces lignes : define('CB_CACHE_CONFIG', CB_PATH . 'data/config.cache.php'); // Fichier de cache pour la configJuste après, ajoutez la ligne de votre nouveau fichier de cache : define('CB_CACHE_MONFICHIER', CB_PATH . 'data/monfichier.cache.php'); // Fichier de cache personnaliséen remplaçant "monfichier" aux deux endroits, pour le nom qui correspond aux données que vous voulez mettre en cache. Préparer des données pour la mise en cache Comme vous l'aurez compris plus haut, il faudra que les données à entrer soient sous forme d'array. Pour cela, je vais vous expliquer comment faire selon deux cas de figure possibles que vous pourriez rencontrer : l'array simple et l'array double. Un array simple Admettons que vous vouliez faire un petit bloc de statistiques (nombre de sujets, messages, inscrits, messages par jour, sujets par jour, inscrits par jour, date d'ouverture, dernier utilisateur, ...) et que chacune des données est donc "séparée". Voici un exemple : $nb_messages = 5000;Il vous suffit de les regrouper en un array, en assignant une clé à chacune des trois variables de l'exemple : $monarray = array('messages' => $nb_messages, 'sujets' => $nb_sujets, 'inscrits' => $nb_inscrits);Vous aurez ensuite besoin de donner un nom à la variable globale qui servira pour le traitement de ces données une fois extraites. Prenons par exemple : $GLOBALS['cb_monarray']Il ne reste plus qu'à écrire ces données dans le fichier de cache, comme ceci : file_put_contents(CB_CACHE_MONFICHIER,'<?php '."\n".Un array double Admettons que vous voulez extraire de la base de données le nombre de réponses de chaque sujet pour en faire un classement. Il vous faudra donc extraire le titre de chacun des sujets, le nombre de réponses et l'id de chacun des sujets. Vous vous retrouvez donc déjà avec trois arrays à gérer : $data['topic_name']Ceci doit se faire à l'intérieur de la boucle même du traitement des données extraites : Dans cet exemple, j'utilise une variable $num que j'initialise à 1, ceci s'avère très pratique pour un classement des sujets actifs par exemple, puisque dans ce cas, on peut se baser sur la clé de chaque entrée de l'array qui commence donc à 1 au lieu de 0. En tout, vous aurez donc trois arrays à écrire. Vous devez donc choisir un nom de variable globale pour chacun d'eux. Pour notre exemple : $GLOBALS['cb_topicname']Il ne vous reste plus qu'à l'écrire dans le fichier ! file_put_contents(CB_CACHE_MONFICHIER,'<?php '."\n".Astuce bonus : Régler l'intervalle de rafraîchissement Dans certains cas de figure, comme une page de statistiques, régler le délai du rafraîchissement du cache est tout indiqué pour que les requêtes lourdes ne soient faites qu'à une intervalle déterminée. Pour cela, vous devez d'abord initialiser le délai d'expiration. Par exemple, si vous voulez le mettre à 6 heures (donc 4 fois par jour) : $time_expire = time() - (3600*6);Ensuite, vous devrez vérifier si le fichier existe, et si c'est le cas, vérifier s'il n'est pas expiré : if(file_exists($cache) && filemtime($cache) > $expire)Ce tutoriel ne faisait que vous montrer les bases de l'utilisation du cache de CB en utilisant des exemples d'application de la préparation des variables et de la mise en cache. Il ne vous reste qu'à l'adapter au contexte de votre MOD sur lequel vous voulez l'utiliser. Document rédigé par Ishimaru Chiaki.
Ce message a été édité par Martin le 27/07/2010 à 09h50.
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici Mon fil Twitter |
| Martin | #2 19/07/2010 - 22h35 |
|
Groupe : Administrateur Hors ligne Site Web |
T'es géniale, merci!
J'ajouterais un exemple avec un array sérialisé, vu que dans l'exemple de la fin, tu ne mets que tes variables simples. Encore merci! |
| Ishimaru Chiaki | #3 19/07/2010 - 23h07 |
|
Groupe : Doc-rédacteur Hors ligne Site Web |
N'hésite pas à le compléter
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici Mon fil Twitter |
| finalbob | #4 26/07/2010 - 13h04 |
|
Groupe : Modérateur Hors ligne Site Web |
Clair et concis, félicitation !
|
| Martin | #5 27/07/2010 - 09h52 |
|
Groupe : Administrateur Hors ligne Site Web |
Connectix Boards > Vous et votre forum Connectix Boards > Support > [Doc] Utiliser le cache de CB
> Informations du forum
1 personne(s) présente(s) durant une période de 15 minutes (0 membre(s) et 1 invité(s)).
Powered by Connectix Boards 0.8.4 © 2005-2012 (7 queries, 1.207 sec)

