Salut à tous,
Je suis en train de créer mon propre module de performance (J’ai testé devel, mais il ne me convient pas, même si je l’utilise comme base de travail).
Voila mon problème, j’aimerai logger tout un tas de stats, et ce, même pour les pages qui ont été mises en cache.
Donc, j’implémente un hook_exit qui me semble être le seul qui fonctionne lorsque les pages viennent du cache (mais j’en suis pas sur), et je n’arrive pas à savoir si oui ou non, à l’aide d’une condition simple, je suis en train de traiter une page qui vient du cache ou une page qui a été chargé : j’ai essayé le code suivant :
<?php
$cache = page_get_cache();
if(isset($cache)){
//moncode
?>Mais ce code ne fonctionne pas, en effet, il retourne quelque chose seulement quand la page vient d’être mise en cache, et non quand la page vient du cache.
En fait, j’aimerai juste savoir s’il y a un moyen simple de savoir ça.
Ou alors, si vous avez quelques infos sur les hook qui fonctionnent même quand la page vient du cache, je suis aussi preneur !
D’avance merci !
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

L’astuce est d’enregistrer au niveau même de PHP un fonction d’extinction. Cela donne quelque chose comme cela (extrait de mon module de perf, moi aussi devel ne me convient pas ;-) :
<?phpfunction drupal_perf_init() {
register_shutdown_function('_drupal_perf_shutdown');
}
function
_drupal_perf_shutdown() {register_shutdown_function('drupal_perf_shutdown');
}
function
drupal_perf_shutdown() {// Ton code ici
}
?>
La fonction est enregistrée dans le hook_init, ce qui implique que tu ne puisses pas fonctionner avec le cache en mode agressif. Si tu veut que cela fonctionne dans ce mode aussi, tu n’as pas d’autre chose que de faire l’enregistrement avant le bootstrap, directement en modifiant index.php
L’astuce dans l’astuce est d’enregistrer une seconde fonction d’extinction à l’exécution de la première. Ce fonction aura l’avantage d’être la dernière chose que PHP fera avant de terminer son exécition.
Yoran - arNuméral
Yoran
1017
D’accord, la seule différence qu’il y a entre ton code et le mien, c’est que j’ai utilisé le hook_boot en pensant qu’il serait exécuté tout le temps. Je corrige cela, et je change le post en résolu si cela fonctionne.
Et donc, à priori, pas de moyen de savoir si la page vient du cache ?
En tout cas, merci pour ton aide
azerty
8
Non, pas de moyen directe, et c’est bien l’intérêt du cache, réduire au maximum les interactions pour tendre vers du statique. Sinon, une option est d’utiliser cacherouter et modifier le cacherouter.inc pour tester les hits.
Yoran - arNuméral
Yoran
1017
Merci beaucoup,
En fait, je crois que mon code fonctionnait, parce que je n’arrive pas à logger les pages venant du cache mais vu ce que tu me dis, cela semble normal. En ce qui concerne l’utilisation du cacherouter, ce n’est pas possible dans mon contexte, mais cela semble une solution possible pour ceux qui le souhaite.
En tout cas merci, pour les pages qui sont en cache, j’utiliserai donc un autre outil.
A +
azerty
8
<?php/<strong>
* Implementation of hook_init().
*/
function monmodule_init() {
$GLOBALS['cache_miss'] = TRUE;
}
/</
strong>* Implementation of hook_exit().
*/
function monmodule_exit() {
if (empty($GLOBALS['cache_miss'])) {
// Cache HIT.
}
else {
// Cache MISS.
}
}
?>
Damien Tournoud
808
Merci à vous deux, a force de me plonger dans mon code, je me suis rendu compte d’une chose.
En fait, dans les deux cas, j’arrivais à séparer si je venais du cache ou pas. Le seul problème, c’est que j’utilisais une fonction drupal qui n’était pas chargée dans le cas ou la page venait du cache…(oui oui… Je sais …) Et donc, mon code plantait sans que je m’en rende compte.
Le problème est résolu et mon module fonctionne très bien.
Merci à vous deux.
azerty
8