Linux/SSH : Quel crawler pour générer le cache de mon site ?

WRInaute accro
Bonjour,

J'ai un site dont le calcul des pages est très long (de l'ordre de 3 secondes) car les traitements sont très complexes. La page reste valide 24h donc je la met en cache après sa première génération (en PHP je vide le contenu du buffer dans un fichier statique qui sera appelé la prochaine fois). Le temps de génération passe de 3 secondes à 0.09 secondes. C'est parfait.

Tous les soirs à 3h je vide le cache pour le renouveler.

Question : comment faire pour forcer la génération du cache pendant la nuit (période de faible charge) ?
Il faudrait que je crawle certaines pages, mais pas toutes. Quel outil (crawler) utiliser pour ça ? Comment procédez vous ?
J'ai un serveur sous Linux OVH Release 2.
Actuellement sur ma version de test je crawle manuellement sur Windows avec Xenu.

Question bonus sur Xenu : comment faire pour que Xenu ne crawle pas les images, ni les fichiers CSS/JS ?

Un grand merci
 
WRInaute accro
Merci Spout, décidément tu es partout.

Tout simplement wget ? Bon. Reste plus qu'à trouver comment lui faire crawler tout le site SAUF *.gif, *.jpg, *.png, *.css, *.js, /dossier-specifique/, /url-specifique.html

Il prend les regex ?
 
WRInaute passionné
et pourquoi pas un cache qui se met en place lors du premier accès à une page par un visiteur tout simplement ? le premier visiteur attendra 3s mais les autres non ...
 
WRInaute accro
aladdin a dit:
et pourquoi pas un cache qui se met en place lors du premier accès à une page par un visiteur tout simplement ? le premier visiteur attendra 3s mais les autres non ...
C'est déjà le cas. Mais si ce premier est Google Bot, il risque de ne pas aimer d'attendre 3 secondes par pages...
RTFM :mrgreen:
Oui désolé mais je suis dans le train sur iphone et ma connexion edge saute toutes les 15 secondes.

Merci pour les infos
 
WRInaute passionné
il faut mettre en place un cron qui fait un wget de chacune des pages à rafraichir.
Tu peux mettre prévoir un paramètre spécial à ton url qui va regénérer le cache automatiquement. C'est ce que j'ai fait sur un site. J'appelle l'url monsite.com/url-a-regenerer.htm?cache_renew
et dans mon code j'ai :
Si cache trop vieux ou si paramètre $_GET['cache_renew'] existe alors remplace le cache.
 
WRInaute accro
C'est à n'y rien comprendre. wget -r http://www.monsite.com/ --delete-after -nd
ne trouve que l'index.html et s'arrête... Sur mes autres sites je n'ai pas le problème.
C'est fou !

Forty, je fais plus simple : accès à la page. Existe t il un cache statique ? Si oui, on le délivre et on arrête, sinon, on le génère et on le stocke. Et tous les soirs à 3h un rm -r /cache/*
Ca fonctionne très bien sur tous mes sites.
Mais là il faut vraiment que je crawle le site car sans cache il est très lent.
 
WRInaute accro
Forty, je viens de comprendre ce que tu disais. Effectivement c'est mieux. Tu génères le fichier cache en utilisant PHP et fopen, fwrite, fclose ou tu te sers du fichier généré par wget ?
 
WRInaute accro
milkiway a dit:
Tu génères le fichier cache en utilisant PHP et fopen, fwrite, fclose
moi, c'est comme cela que je gère mes mises en cache : ça me permet de rajouter à ce cache des éléments à la volée
 
WRInaute passionné
milkiway a dit:
Forty, je fais plus simple : accès à la page. Existe t il un cache statique ? Si oui, on le délivre et on arrête, sinon, on le génère et on le stocke. Et tous les soirs à 3h un rm -r /cache/*
c'est ce que je fais mais je ne supprime pas mes caches. J'ai deux méthodes pour faire la mise à jour : quand le cache a plus de X heures ou quand j'ai un certain paramètre GET qui force la mise à jour. WGET permet d'appeler une page avec ce paramètre qui fait la mise à jour du cache. Il faut donc faire un script qui fait une boucle avec autant de WGET que de cache à rafraîchir.
 
WRInaute accro
Le temps que tu me répondes c'est ce que j'ai fait. C'est bien mieux que mon précédent système merci pour l'idée.
La dernière étape sera carrément d'utiliser wget pour générer le cache (et non PHP) pour aller encore plus vite.

Et pour wget en boucle, impossible avec mes 26000+ URL. J'ai écrit un script qui liste la totalité des pages qui ont besoin d'être rafraichies la nuit tous les jours, le reste sera rafraichi par l'utilisateur.

Merci !
 
WRInaute accro
Après, reste à voir s'il est nécessaire de recréer le cache toutes les 24h. Sur mes sites, le cache est regénéré intégralement à la demande, mais sinon, je supprime la version en cache quand des changements surviennent pour cette page, dans le cas contraire, le cache peut servir plusieurs jours.
 
WRInaute accro
Les traitements complexes c'est quoi ? Requêtes SQL ? Parsing XML ? Autre ?
Il faut penser qu'il y a 3 types de cache, et tous mis ensemble ça boost bien:
- Cache de l'output
- Cache de datas
- Cache d'Opcode
 
WRInaute accro
Leonick : oui, mon contenu a une durée de validité de 24h, pas plus. Certaines sections ont une durée de vie de 2h mais il ne faut pas pousser.

spout : ce qui est long, ce sont les requêtes SQL pour ma part.
En fait deux étapes.
L'une qui met à jour les données. Rien à faire niveau cache car tout change toutes les 24h. Je télécharge des fichiers XML, parse, traite, regex, dédoublonne, analyse, recherche, match, etc. puis import en base de données.

L'autre : afficher une page qui va faire des requêtes dans ces données (va taper dans plusieurs bases de plusieurs 10aines de milliers de lignes) + appels récursifs à des web services.

Là ma solution est donc de vider totalement mes données toutes les 24h, de forcer la régénération du cache en tâche de fond sur les pages critiques. Pour l'utilisateur c'est transparent et le site est en permanence accessible et rapidement.
Mon cache : c'est la copie exacte de la page finale (son contenu HTML vidé dans un fichier). Je ne vois pas comment ça pourrait être plus rapide ?
 
WRInaute accro
dans le cache, je ne met que le contenu sql travaillé, le reste est fait à la volée. Et donc je ne regénère le traitement du sql que si besoin et de façon hyper ciblée.
pour ton cas, si avec les requêtes externes tu n'as que 250 lignes de ta table de 100 Klignes qui sont modifiées, tu n'auras besoin de regénérer que ces 250 caches, pas les 100 000
 
WRInaute impliqué
euh... J'ai peut être pas compris la question mais je comprend pas pourquoi s'orienter vers un wget... Ce ne serait pas plus simple un cron avec un php-cli?
 
Discussions similaires
Haut