Page 1 sur 1

Cache et variables dynamiques.

Posté : 08 juin 2014, 23:13
par Elie
Hello,

Après m'être motivé a passer tout monde site en PDO, j'aimerai désormais mettre en cache le maximum de chose.
Je me servais d'un petit script de cache qui marchait bien à l'époque (http://svn.gna.org/svn/miaouu/branches/ ... /Cache.php) mais je suis prêt pour réapprendre la logique d'un script peut-être plus moderne.

J'ai beaucoup d'informations stockées dans des bases de données qui ne changent pas et pourrait très bien être enregistrées dans une page fixe.
Par contre par exemple, j'affiche une phrase disant "Cette page a été consultée X fois cette semaine".

Ma logique serait d'enregistrée ma page en fixe avec un %s dedans et faire un sprintf pour remplacer ce chiffre par le bon chiffre.

Ensuite j'aimerai savoir quel est le plus simple pour generer ma page a chaque fois qu'une informations est modifié dans ma base de données.
Je fais un truc chelou avec des fichiers .tpl ou les données sont placées au bon endroit ?

En gros j'ai un dossier template pour generer quelques pages et un dossier cache pour stocker les pages en cache.
Sachant que j'ai 10 000 films dans ma base de données, est-ce que je me fais chier a faire également des sous-dossiers dans le cache pour stocker les fichiers par années, etc ... ?

Bref, ca m'interesse d'avoir la bonne logique avant de commencer ce chantier !

Re: Cache et variables dynamiques.

Posté : 09 juin 2014, 07:36
par xTG
Si tu fais des sprintf sur toutes tes variables dynamiques ce n'est plus du cache. :)
Peux-tu nous en dire plus sur ton site pour qu'on t'oriente ?

Si c'est une base de film je vois la chose ainsi :
- mettre les pages de listing des films en cache pour une durée de X jours (supprimer ces pages à l'ajout dans la bdd d'un nouveau film)
- mettre en cache permanent la page d'un film (et si tu as des commentaires sur cette page tu peux faire un cache avec extension PHP et juste un include de la page de commentaire)

Re: Cache et variables dynamiques.

Posté : 09 juin 2014, 08:58
par Elie
Hello,

Voilà comment je découperai une page de mon site.
Ca fait beaucoup de fichier externe mais si cela évite une requete MySQL à chaque fois, est-ce rellement utile ?

Pour le listing des films, je ne peux pas faire de page fixe vu le moteur de recherche derrière mais déjà sur les pages film > release > fichier ça représente la majorité de mon trafic.

Re: Cache et variables dynamiques.

Posté : 09 juin 2014, 16:05
par yann18
J'ai beaucoup d'informations stockées dans des bases de données qui ne changent pas et pourrait très bien être enregistrées dans une page fixe.
si ces données là ne changent pas d'un appel à l'autre tu auras certainement besoin de mettre en place un cache partiel.Contrairement au cache total où toute la page est mise en cache, le cache partiel te permet de stocker qu'une partie des données provenant de la Bd( par exemple mettre en cache le résultat de la requête genre affichage des films).avec ce type de cache, si les films n'ont pas changé aucune requête sql n'est exécutée pour récupérer la liste des films c'est le cache qui s'en charge à condition qu'il soit à jour et non périmé.Et si les données venaient à changer(ajout, suppression... des films, des commentaires) tu mets à jour le cache en le supprimant.

Il existe plusieurs supports de cache qui permettant de concevoir un système de cache:
-le support de cache basé sur les fichiers plats(le plus connu)
-le support de cache basé sur la mémoire( apc , memcache) beaucoup plus rapide et qui peut être adapté à ta problématique
-le support de cache basé sur sqlite
En gros j'ai un dossier template pour generer quelques pages et un dossier cache pour stocker les pages en cache.
Sachant que j'ai 10 000 films dans ma base de données, est-ce que je me fais chier a faire également des sous-dossiers dans le cache pour stocker les fichiers par années, etc ... ?
avec le système de cache classique (basé sur un fichier ou une mémoire) c'est hyper lourd à mettre en place voire contre-productif car il faut créer des fichiers pour toutes les années, pour tous les genres....ce qui peut être intéressant dans le cas spécifique c'est de choisir un autre support de cache comme sqlite pour permettre aux internautes de formuler n'importe quelle recherche( par année, par genre...).
Ma logique serait d'enregistrée ma page en fixe avec un %s dedans et faire un sprintf pour remplacer ce chiffre par le bon chiffre.
extraire la note d'un film en base par exemple représente qu'une seule ligne de résultat.est-il avantageux de mettre un tel calcul dans un cache sachant que créer un cache et le régénérer en cas de modif dans la bd est aussi consommatrice de ressource? perso si le caclul est complexe, je stockerai le calcul dans la table ou j'exécuterai une telle requête dans une procédure stockée mysql.



Pour le listing des films, je ne peux pas faire de page fixe vu le moteur de recherche derrière mais déjà sur les pages film > release > fichier ça représente la majorité de mon trafic.
il y a tant de moteurs de recherches(comme ElasticSearch) qui peuvent effectuer des recherches à partir des requêtes http/json, d'une BD, d'un fichier...

Je ne sais pas si tu as mis en place un cache http qui est aussi primordial dans le cadre de l'optimisation d'un site générant du trafic?
Si tu veux pousser l'optimisation plus loin tu peux voir les excellentes performances du serveur web léger Nginx(utilisé par ton concurrent Netflix) à la place d'apache et pourquoi pas MariaDB à la place de MySQL