Quelles méthodes de mise en cache, autres que le fichier ou la base de données, sont disponibles ?

StackOverflow https://stackoverflow.com/questions/4062

  •  08-06-2019
  •  | 
  •  

Question

Actuellement, je ne connais que deux façons de mettre en cache des données (j'utilise PHP mais je suppose que la même chose s'appliquera à la plupart des langages).

  1. Enregistrez le cache dans un fichier
  2. Enregistrez le cache dans un grand champ de base de données

Existe-t-il d'autres moyens (peut-être meilleurs) de mise en cache ou est-ce vraiment aussi simple ?

Était-ce utile?

La solution

Peut-être souhaitez-vous expliciter plus précisément ce que vous souhaitez mettre en cache.Vous avez toutes ces possibilités de mettre en cache :

  • Accéder à la base de données où vous mettez en cache les données en ajustant d'abord correctement votre SGBDR, puis en utilisant une couche pour déléguer la décision de détecter plusieurs requêtes pour les mêmes données (avec AdoDB Par exemple.)
  • Extraire des calculs à partir de boucles dans le code vous ne calculez donc pas la même valeur plusieurs fois. Voici votre troisième méthode :stocker les résultats dans la session pour l'utilisateur.
  • Précompiler le code PHP avec une extension comme Cache APC.De cette façon, vous n'avez pas besoin de compiler le même code PHP pour chaque requête.
  • La page envoyée à l'utilisateur assurez-vous de définir les bonnes balises META (faites une bonne chose pour le monde et n'utilisez pas ETL au moins absolument nécessaire) ;ou peut-être rendre les pages dynamiques complètement statiques (avoir un processus par lots qui génère des pages .html) ;ou en utilisant un cache proxy comme Calmar.
  • Prélecture et par là, je fais référence à toutes ces opportunités dont vous disposez pour améliorer l'expérience utilisateur simplement en faisant des choses pendant que l'utilisateur ne regarde pas dans votre direction.Par exemple, précharger les balises IMG dans le fichier HTML, régler le SGBDR pour le préconfiguration, précalculer les résultats en stockant les calculs complexes dans la base de données, etc.

D'après mon expérience, je vous parie que votre code peut être considérablement amélioré avant de commencer à parler de mise en cache.Considérez, par exemple, dans quelle mesure la navigation de votre site est bien structurée et dans quelle mesure vous contrôlez l'expérience utilisateur.Vérifiez ensuite votre code avec un outil comme XDebug.

Vérifiez également dans quelle mesure vous effectuez vos requêtes SQL et dans quelle mesure indexez-vous vos tables.Vérifiez ensuite à nouveau votre code pour rechercher des opportunités d'appliquer la règle "lire plusieurs fois mais écrire une seule fois"

Utilisez un outil simple comme YSlent pour suggérer d'autres choses simples à améliorer.Vérifiez à nouveau votre code à la recherche d'opportunités pour mettre de la logique dans le navigateur (via JavaScript)

Autres conseils

Vous pouvez également mettre en cache en mémoire ce qui est beaucoup plus efficace.Essayer memcaché.

Seconding Memcached, fait bien les choses simples et peut devenir distributif et tout ce jazz si vous en avez aussi besoin

Si vous utilisez Apache, vous pouvez utiliser mod_rewrite pour mettre en cache statiquement vos pages Web.Disons que vous utilisez PHP et que vous avez une demande pour "/somepage.php".Dans votre fichier .htaccess vous mettez ce qui suit :

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

Si votre cache s'avère vide, la requête est traitée par votre script php comme d'habitude, il suffit donc maintenant de faire en sorte que votre script php stocke le code HTML résultant dans le cache.La façon la plus simple de procéder consiste à utiliser une autre règle htaccess pour ajouter quelques fichiers php à toutes vos requêtes php (cela peut ou non être une bonne idée, selon votre application) :

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

Ensuite, vous feriez quelque chose comme ceci :

pre_cache.php :

ob_start();

post_cache.php :

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

Avec quelques expressions régulières supplémentaires dans le fichier .htaccess, nous pourrions probablement également commencer à mettre en cache les requêtes de chaîne de requête, mais je laisse cela comme un exercice pour le lecteur :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top