Domanda

Qual è il modo migliore per implementare una cache per un sito PHP?Ovviamente, ci sono alcune cose che non dovrebbero essere memorizzate nella cache (ad esempio le query di ricerca), ma voglio trovare una buona soluzione che mi assicuri di evitare l'effetto "digg".

So che esiste WP-Cache per WordPress, ma sto scrivendo una soluzione personalizzata che non è basata su WP.Sono interessato a scrivere la mia cache (se è abbastanza semplice), oppure potresti indicarmi un framework carino e leggero.Tuttavia non conosco molto Apache, quindi se fosse un framework PHP sarebbe più adatto.

Grazie.

È stato utile?

Soluzione

Se una cache proxy è fuori questione e stai servendo file HTML completi, otterrai le migliori prestazioni ignorando del tutto PHP.Studia come WP Super Cache lavori.

Le pagine non memorizzate nella cache vengono copiate in una cartella della cache con una struttura URL simile a quella del tuo sito.Nelle richieste successive, mod_rewrite rileva l'esistenza del file memorizzato nella cache e lo serve invece.altre direttive RewriteCond vengono utilizzate per assicurarsi che i commentatori/gli utenti registrati vedano le richieste PHP in tempo reale, ma la maggior parte dei visitatori sarà servita direttamente da Apache.

Altri suggerimenti

Puoi usare buffering in uscita per salvare selettivamente parti del tuo output (quelle che vuoi memorizzare nella cache) e mostrarle all'utente successivo se non è passato abbastanza tempo.In questo modo stai ancora visualizzando al volo altre parti della pagina (ad esempio riquadri personalizzabili, informazioni personali).

Il modo migliore è utilizzare una cache proxy (Squid, Varnish) e fornire intestazioni Cache-Control/Expires appropriate, insieme agli ETag:Vedere Tutorial sulla memorizzazione nella cache di Mark Nottingham per una descrizione completa del funzionamento delle cache e di come ottenere le massime prestazioni da un proxy di caching.

Controlla anche memcached, e prova a memorizzare nella cache le query del database (o, meglio ancora, i frammenti di pagina pre-renderizzati).

io raccomanderei Memcached O APC.Entrambe sono soluzioni di memorizzazione nella cache in memoria con API semplicissime e molte librerie.

Il problema con questi 2 è che devi installarli sul tuo server web o su un altro server se è Memcached.

APC

Professionisti:
  • Semplice
  • Veloce
  • Accelera anche l'esecuzione di PHP
Contro
  • Non funziona per i sistemi distribuiti, ogni macchina memorizza la propria cache localmente

Memcached

Professionisti:
  • Veloce (più o meno)
  • Può essere installato su un server separato per essere utilizzato da tutti i server Web
  • Altamente testato, sviluppato su LiveJournal
  • Utilizzato da tutti i grandi (Facebook, Yahoo, Mozilla)

    Contro:
  • Più lento dell'APC

  • Possibile latenza di rete
  • Leggermente più configurazione

Non consiglierei di scriverne uno tuo, ce ne sono molti là fuori.Potresti utilizzare una cache basata su disco se non puoi installare software sul tuo server web, ma ci sono possibili problemi di razza da affrontare.Una richiesta potrebbe scrivere sul file mentre un'altra sta leggendo.

In realtà potresti memorizzare nella cache le query di ricerca, anche per pochi secondi o un minuto.A meno che il tuo database non venga aggiornato più di qualche volta al secondo, un certo ritardo andrebbe bene.

Il motore dei modelli PHP Smarty (http://www.smarty.net) include un sistema di memorizzazione nella cache abbastanza avanzato.

Puoi trovare i dettagli nella sezione caching del manuale di Smarty: http://www.smarty.net/manual/en/caching.php

Sembra che tu stia cercando un framework per la cache PHP.Ti consiglio il sistema di template TinyButStrong che viene fornito con un ottimo plugin CacheSystem.È semplice, leggero, personalizzabile (puoi memorizzare nella cache qualunque parte del file html desideri), molto potente ^^

Semplice memorizzazione nella cache di pagine o parti di pagine: la classe Pear::CacheLite.Utilizzo anche APC e memcache per cose diverse, ma le altre risposte che ho visto finora riguardano più sistemi più completi e complessi.Se hai solo bisogno di risparmiare tempo ricostruendo una parte di una pagina, Cache_lite con un archivio supportato da file è del tutto sufficiente e molto semplice da implementare.

Progetto Gazzella (un sito torrent open source) fornisce una guida passo passo sulla configurazione di Memcached sul sito che puoi facilmente utilizzare su qualsiasi altro sito Web che potresti voler configurare e che gestirà molto traffico.

Prendi il sorgente e leggi la documentazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top