2011-11-24 31 views
25

Ho un sito web ad alto traffico e ho bisogno di assicurarmi che il mio sito sia abbastanza veloce da mostrare le mie pagine a tutti rapidamente.Ottimizzazione sito web PHP

Ho cercato su Google molti articoli su velocità e l'ottimizzazione ed ecco cosa ho trovato:

  • cache della pagina
  • salvarlo sul disco

Caching della pagina in memoria:

Questo è molto veloce ma se ho bisogno di cambiare il contenuto della mia pagina devo rimuoverlo dalla cache e quindi ri-salva il file sul disco.

salvarlo su disco

Questo è molto facile da mantenere, ma ogni volta che si accede alla pagina devo leggere sul disco.

Quale metodo devo seguire?

+3

Dovresti aggiungere ulteriori dettagli sul tuo sito web: os, server, cms? ...ecc – soju

+0

io uso apache + php + mysql + centos - no cms o framework – ana

+0

che tipo di hosting hai? condivisa? dedicato? –

risposta

40

gen & idm hanno ragione, ma ecco come:

memorizzazione nella cache (pagine o contenuti) è crutiale per le prestazioni. Le chiamate minime richieste al database o al file system sono migliori se il contenuto è statico o dinamico.

È possibile utilizzare un acceleratore di PHP, se avete bisogno di eseguire contenuti dinamici:

La mia raccomandazione è di usare Alternative PHP Cache (APC)

Ecco alcuni benchmark:

What is the best PHP accelerator to use?

PHP Accelerators : APC vs Zend vs XCache with Zend Framework

Lighttpd – PHP Acceleration Benchmarks

Per il contenuto della cache e le pagine pari è possibile utilizzare: Memcached o Redis.

Memcached: libero & open source, ad alte prestazioni, sistema di caching distribuito oggetto di memoria, di natura generica, ma destinati ad essere utilizzati per accelerare le applicazioni web dinamiche, alleviando il carico del database. Memcached è un archivio di valori-chiave in memoria per piccoli blocchi di dati arbitrari (stringhe, oggetti) dai risultati delle chiamate al database, delle chiamate API o del rendering della pagina.

Redis Redis è un archivio di valori-chiave avanzato e open source. Viene spesso definito come un server della struttura dati poiché le chiavi possono contenere stringhe, hash, elenchi, set e serie ordinate.

Entrambi sono uno strumento molto utile per memorizzare contenuti o variabili.

Ecco alcuni benchmark e si può scegliere quale preferite:

Redis vs Memcached

Redis vs Memcached

Redis VS Memcached (slightly better bench)

On Redis, Memcached, Speed, Benchmarks and The Toilet

Y ou può installare anche Varnish, nginx, o G-Wan

Vernice: Varnish è un acceleratore HTTP progettato per siti web dinamici di contenuti pesanti. A differenza di altri acceleratori HTTP, come Squid, che è nato come cache lato client, o Apache, che è principalmente un server di origine, Varnish è stato progettato da zero come acceleratore HTTP.

nginx nginx (si pronuncia? Motore-x?) È un peso leggero, Web server ad alte prestazioni/proxy inverso e di posta elettronica (IMAP/POP3) proxy, rilasciato sotto licenza BSD-like. Funziona su versioni Unix, Linux, BSD, Mac OS X, Solaris e Microsoft Windows.

g-wan G-WAN è un server Web con script ANSI C e un negozio di valore-chiave che sovraperformare tutte le altre soluzioni.

Ecco alcuni benchmark e si può scegliere quale preferite:

Serving static files: a comparison between Apache, Nginx, Varnish and G-WAN

Web Server Performance Benchmarks

Nginx+Varnish compared to Nginx

Apache, Varnish, nginx and lighttpd

G-WAN vs Nginx

+6

io uso nginx + redis e sono super veloci +1 per la risposta – Gabriel

4

Hai una buona idea, che è vicino a quello che faccio io stesso. Se ho una pagina che è al 100% statica, salverò una versione html e la servirò all'utente invece di generare nuovamente il contenuto ogni volta. In alcuni casi questo salva sia query mysql che diverse operazioni io. Ogni volta che apporto alcune modifiche, la mia interfaccia di amministrazione rimuove semplicemente il file html e lo ricrea.

Questo metodo ha dimostrato di essere circa 100 volte più veloce sul mio server.

+0

Questo è uno dei migliori metodi di memorizzazione nella cache, basta ricreare la pagina html statica sulle modifiche. –

+2

Questo processo potrebbe essere automatizzato abbastanza facilmente. –

1

posso aggiungere:

  • Cache tutto ciò che potete

  • Ridurre al minimo il numero di include

  • Usa acceleratore

prega, indagare, ciò che rende il vostro sito lento. Non dimenticare YSlow e cose simili, possono aiutarti molto.

Inoltre, se si dispone di calcoli pesanti si potrebbe scrivere estensione PHP per loro, ma non credo che questo è il vostro caso

3

La grande domanda con le prestazioni del sito Web è "servi pagine statiche o servi pagine dinamiche?".

pagine statiche

Il modo migliore per accelerare pagine statiche è quello di memorizzare nella cache loro fuori del vostro sito web. Se puoi permetterti, servili da un CDN (Akamai, Cotendo, Level3). In questo caso, il traffico non colpisce mai il tuo sito. Esistono diversi modi per controllare la cache, dalla durata fissa alle direttive della cache HTTP standard.

Anche se non è possibile pubblicare HTML da una rete CDN, la memorizzazione di immagini, javascript e altre risorse statiche su una rete CDN può velocizzare il sito: è possibile utilizzare un servizio cloud come Amazon per questo.

Se non è possibile acquistare un CDN per il codice HTML, è possibile utilizzare il proprio livello proxy di memorizzazione nella cache, come suggerisce il libro di Zeus. Ho avuto buoni risultati con Varnish. Idealmente, dovresti eseguire il tuo caching proxy sul proprio hardware, ma puoi eseguirlo sui tuoi server esistenti.

pagine dinamiche

pagine dinamiche sono più difficili da memorizzare nella cache - così allora avete bisogno di concentrarsi sul rendere le pagine stesse il più efficiente possibile. Ciò significa fondamentalmente la ricerca del collo di bottiglia: nella maggior parte dei sistemi, il collo di bottiglia è il database (ma non sempre).

Se sei sicuro che il collo di bottiglia è il database, ci sono diversi modi per le opzioni di memorizzazione nella cache: puoi memorizzare nella cache "snippet" di HTML, oppure puoi memorizzare nella cache le query del database. L'utilizzo di un acceleratore aiuta con questo: non lo invento da zero. Questo probabilmente significa re-architettare (parti di) la tua applicazione.

2

Devi prima profilare il tuo sito.

Invece di ipotesi selvagge, è necessario determinare determinati colli di bottiglia e quindi risolvere quel determinato problema.

Cahing non è un proiettile d'argento né un sinonimo per l'ottimizzazione.
A volte il caching non è applicabile (per gli annunci, ad esempio), a volte non aiuta nulla poiché il motivo della lentezza del sito potrebbe essere in qualche punto non correlato.
Il sito potrebbe esaurire la memoria. Quindi, il caching della memoria peggiorerà le cose.

Non riesco a credere che qualcuno abbia un sito ad alto traffico e non abbia detto una parola della profilazione precedente. Come puoi eseguirlo senza sapere nulla dei suoi interni? Carico della CPU, carico di memoria, I/O del disco e così via.

Problemi correlati