2013-06-18 1 views
0

J'ai un site web assez basique, écrit en php pur, sans framework, fonctionnant dans un environnement LAMP de base.Comment mieux mettre en cache toute la sortie HTML sur le serveur

Le site génère dynamiquement un balisage basé sur l'en-tête HTTP User Agent et certains paramètres de chaîne de requête. Par exemple "itemdetail.php" inspecterait le paramètre "itemid" de la chaîne de requête et l'en-tête de l'agent utilisateur et produirait un balisage.

Je souhaite mettre en cache ce balisage, de sorte que la prochaine fois qu'un périphérique avec le même User Agent et itemid dans la chaîne de requête tente de demander la page, il vide simplement le balisage présent dans son cache. Je réalise que je pourrais le faire manuellement en php en utilisant memcache, et écris juste du code en haut de la page pour inspecter les params pertinents, et soit essayer de memcached ou rendre la page et stocker le balisage dans memcached, mais je pensais qu'il pourrait être possible d'éviter la couche de PHP tout à fait, en utilisant quelque chose comme ce qui est décrit ici http://httpd.apache.org/docs/2.2/caching.html

Alors, ma question, que je me rends compte peut-être vague et ce post va se tuer est:

Quelle est la mise en œuvre de mise en cache recommandée ici? Est-ce bien d'utiliser memcache au niveau php, ou les modules apache sont-ils suffisants pour répondre à mes besoins?

Répondre

2

La génération de pages différentes en fonction des agents utilisateur est une mauvaise pratique. Tu ne devrais pas faire ça. Si vous souhaitez mettre en cache des pages entières parce que votre site Web est lent, le problème doit probablement être recherché dans votre code. Sur le sujet: Écrivez une fonction simple qui permet à l'uri servi de hachager une fonction de hachage à faible encombrement (md5, sha1, ...) par exemple.

<?php 
$hash = md5('itemdetail.php-'.$itemid); 
if (file_exist('cache/'.$hash.'.html') { 
    echo file_get_contents('cache/'.$hash.'.html'); 
    die(); 
} 

puis à la fin de votre script enregistrer le résultat de « hachage /'.$ cache. » Html '. Vous pouvez utiliser différents type d'extension ou de dossier ou ...

Si vous voulez mettre en cache sans utiliser PHP, jetez un oeil à Vernis. Ou l'autre exemple posté ici.

+0

Eh bien, la chose User-Agent est bien ancrée dans la fonctionnalité. Il s'agit d'un site de vente de contenu pour les appareils mobiles, de sorte que différents appareils obtiennent un contenu différent. Avec votre solution, comment allez-vous effacer le cache? Un cron pour vider le dossier cache, ou autre chose? – BoomShaka

+0

vous pouvez écrire un cron qui vérifie simplement tous les temps de création des fichiers de cache (en utilisant scandri() et filemtime(), par exemple) et supprimez-le s'il est trop ancien. Vous pouvez également le faire avant de répercuter le contenu de la mémoire cache, mais vous devez ensuite créer un surcoût supplémentaire en vérifiant l'horodatage du fichier. – Pinoniq

0

Si vous connaissez déjà OpenCart, voici ce que j'ai écrit pour le faire. nous espérons que vous aurez l'idée étant donné le contexte inconnu possible. Fondamentalement, créer une variable générant un nom de fichier unique basé sur le nom de fichier et la chaîne de quêtes. Créez ce fichier en écrivant toutes les sorties HTML dans ce fichier.

Ensuite, en ce qui concerne la demande de traitement, vous pouvez vérifier si le fichier cache unique existe et l'envoyer au lieu de traiter la demande.

0

utiliser la bibliothèque memcached ... vous devez d'abord l'installer puis memcached fournit et le système de mise en cache en mémoire pour php

Questions connexes