Question

Quelle est la meilleure façon d’implémenter un cache pour un site PHP ?Évidemment, certaines choses ne doivent pas être mises en cache (par exemple les requêtes de recherche), mais je souhaite trouver une bonne solution qui garantira d'éviter « l'effet creuser ».

Je sais qu'il existe WP-Cache pour WordPress, mais j'écris une solution personnalisée qui n'est pas basée sur WP.Je souhaite soit écrire mon propre cache (si c'est assez simple), soit vous pouvez m'indiquer un framework agréable et léger.Cependant, je ne connais pas beaucoup Apache, donc s'il s'agissait d'un framework PHP, ce serait mieux adapté.

Merci.

Était-ce utile?

La solution

Si un cache proxy est hors de question et que vous servez des fichiers HTML complets, vous obtiendrez les meilleures performances en contournant complètement PHP.Étudiez comment WP Super Cache travaux.

Les pages non mises en cache sont copiées dans un dossier de cache avec une structure d'URL similaire à celle de votre site.Lors des requêtes ultérieures, mod_rewrite note l'existence du fichier mis en cache et le sert à la place.d'autres directives RewriteCond sont utilisées pour garantir que les commentateurs/utilisateurs connectés voient les requêtes PHP en direct, mais la majorité des visiteurs seront servis directement par Apache.

Autres conseils

Vous pouvez utiliser mise en mémoire tampon de sortie pour enregistrer sélectivement des parties de votre sortie (celles que vous souhaitez mettre en cache) et les afficher à l'utilisateur suivant si cela n'a pas été assez long.De cette façon, vous continuez à afficher d'autres parties de la page à la volée (par exemple, les zones personnalisables, les informations personnelles).

La meilleure façon de procéder est d'utiliser un cache proxy (Squid, Varnish) et de servir les en-têtes Cache-Control/Expires appropriés, ainsi que les ETags :voir Tutoriel de mise en cache de Mark Nottingham pour une description complète du fonctionnement des caches et de la manière dont vous pouvez tirer le meilleur parti des performances d'un proxy de mise en cache.

Consultez également memcaché, et essayez d'y mettre en cache vos requêtes de base de données (ou mieux encore, vos fragments de page pré-rendus).

je recommanderais Memcaché ou APC.Les deux sont des solutions de mise en cache en mémoire avec des API extrêmement simples et de nombreuses bibliothèques.

Le problème avec ces 2 est que vous devez les installer sur votre serveur Web ou sur un autre serveur s'il est Memcached.

APC

Avantages:
  • Simple
  • Rapide
  • Accélère également l'exécution de PHP
Les inconvénients
  • Ne fonctionne pas pour les systèmes distribués, chaque machine stocke son cache localement

Memcaché

Avantages:
  • Rapide (plutôt)
  • Peut être installé sur un serveur distinct pour que tous les serveurs Web puissent l'utiliser
  • Hautement testé, développé chez LiveJournal
  • Utilisé par tous les grands (Facebook, Yahoo, Mozilla)

    Les inconvénients:
  • Plus lent qu'APC

  • Latence possible du réseau
  • Un peu plus de configuration

Je ne recommanderais pas d'écrire le vôtre, il y en a beaucoup.Vous pouvez opter pour un cache sur disque si vous ne pouvez pas installer de logiciel sur votre serveur Web, mais il existe des problèmes de concurrence possibles à résoudre.Une requête peut écrire dans le fichier pendant qu'une autre est en train de lire.

Vous pouvez en fait mettre en cache les requêtes de recherche, même pendant quelques secondes à une minute.À moins que votre base de données ne soit mise à jour plusieurs fois par seconde, un certain retard serait acceptable.

Le moteur de template PHP Smarty (http://www.smarty.net) inclut un système de mise en cache assez avancé.

Vous pouvez trouver des détails dans la section mise en cache du manuel Smarty : http://www.smarty.net/manual/en/caching.php

Vous semblez rechercher un framework de cache PHP.Je vous recommande le système de template TinyButStrong qui est livré avec un très bon plugin CacheSystem.C'est simple, léger, personnalisable (vous pouvez mettre en cache n'importe quelle partie du fichier html que vous voulez), très puissant ^^

Mise en cache simple de pages ou de parties de pages - la classe Pear::CacheLite.J'utilise également APC et Memcache pour différentes choses, mais les autres réponses que j'ai vues jusqu'à présent concernent davantage des systèmes plus complets et plus complexes.Si vous avez juste besoin d'économiser quelques efforts pour reconstruire une partie d'une page, Cache_lite avec un magasin sauvegardé sur des fichiers est tout à fait suffisant et très simple à mettre en œuvre.

Projet Gazelle (un site torrent open source) fournit un guide étape par étape sur la configuration de Memcached sur le site que vous pouvez facilement utiliser sur tout autre site Web que vous souhaiterez peut-être configurer et qui gérera beaucoup de trafic.

Prenez la source et lisez la documentation.

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