Bonjour,
Je suis en train de developper un petit script pour faire des plans de site Google Sitemaps pour les forums phpBB et je me pose un petite question à propos du format à employer pour mettre en place un système de cache.
Le problème est assez générale, c'est pour quoi je poste ici.
L'intérêt d'éviter de lister 5000 éléments sans cache toutes les 3 minutes est assez évident.
Principe :
Le script sort une liste d'url (jusqu'à 50 000, mais 5000 est déjà beaucoup).
Du coup, j'ai découpé l'énorme requête SQL en cycles.
Disons que l'on configure un cycle de 200 éléments par requête.
Le script les récupère et les envois directement par echo.
Du coup, il est assez simple de créer un fichier de cache correspondant à un cycle et de le mettre à jour tous les jours.
Question :
Donc, j'ai procédé par étapes. J'ai tout d'abord simplement mis en cache un var_export(), puis un serialize() du résultat de la requête.
Plus rapide.
Puis, j'ai carrément essayé de mettre en cache un tableau contenant le résultat mis en forme plutôt que simplement le résultat de la requête SQL, en me disant que c'était toujours ça de moins à refaire.
Ce qui veut dire que j'ai des trucs comme :
Dans chaque cellule du tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <url> <loc>http://localhost/forums/viewtopic.php?t=6</loc> <lastmod>2006-03-16T04:51:31+00:00</lastmod> <changefreq>always</changefreq> <priority>1.0</priority> </url>
Les fichier caché sont de cette forme :
En plus long.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <?php //mx Google sitemaps www.phpBB-SEO.com // Gen Stats : 0.02244 s - 9 sql // datas if ( !defined('IN_PHPBB') && !defined('IN_PORTAL') ) { die('Hacking attempt'); } $cached = unserialize('a:3:{i:77;s:178:" <url> <loc>http://localhost/forums/viewtopic.php?t=4</loc> <lastmod>2006-03-16T04:50:19+00:00</lastmod> <changefreq>always</changefreq> <priority>1.0</priority> </url> ";i:78;s:178:" <url> <loc>http://localhost/forums/viewtopic.php?t=3</loc> <lastmod>2006-03-15T22:38:24+00:00</lastmod> <changefreq>always</changefreq> <priority>1.0</priority> </url> ";}'); $increment = 50; ?>
Et je dois donc ajouter une petit boucle pour afficher les éléments du tableau.
Et là, c'est semble t il beaucoup plus rapide que de seulement mettre en cache la requête.
Du coup, je me suis dit qu'il était encore possible d'éviter de faire travailler php en utilisant un cache de cette forme :
Et de simplement l'afficher avec un include, mais quelle n'as pas été ma surprise! Sur une centaine d'éléments, séparés en deux fichiers, c'est deux fois plus long que la première méthode qui emplois pourtant une boucle supplémentaire pour l'affichage et un unserialize dans l'include.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <?php //mx Google sitemaps www.phpBB-SEO.com // Gen Stats : 0.02244 s - 9 sql // datas if ( !defined('IN_PHPBB') && !defined('IN_PORTAL') ) { die('Hacking attempt'); } ?> <url> <loc>http://localhost/forums/viewtopic.php?t=4</loc> <lastmod>2006-03-16T04:50:19+00:00</lastmod> <changefreq>always</changefreq> <priority>1.0</priority> </url> <url> <loc>http://localhost/forums/viewtopic.php?t=3</loc> <lastmod>2006-03-15T22:38:24+00:00</lastmod> <changefreq>always</changefreq> <priority>1.0</priority> </url> <?php $increment = 50; ?>
Alors je me demande si c'est normal, si cela pourrait être différent sur des cache de genre 250 éléments.
Je pensait que le xml ne serait pas interprété et que l'on ne pouvait espérer aller plus vite. La c'est carrément deux fois plus long d'inclure le deuxième cache que de traiter le second.
Voilà donc ma questionje sais elle est longue, mais cela à gravement titillé ma curiosité
donc si vous en êtes à lire la fin de ce message vous avez sûrement un début d'idée
++
Partager