2009-02-25 13 views
6

Abbiamo in programma di sviluppare un nuovo sito web. Il nostro obiettivo è caricare rapidamente le pagine web . Quali sono tutte le tecniche che dobbiamo seguire.Caricamento veloce pagine web

Qualcuno può darmi buoni suggerimenti, collegamenti ai forum o articoli.

La nostra piattaforma è PHP, MySQL, Javascript e AJAX.

+0

Quanto velocemente è "veloce"? Che tipo di carico ti aspetti? Davvero? Come verrà ospitata l'app? Cosa farai effettivamente? C'è una differenza mondiale tra la scrittura di qualcosa che è "abbastanza veloce" e qualcosa che può gestire carichi su scala Facebook. –

risposta

19

Una delle migliori guide per accelerare i tempi di caricamento del tuo sito web:

http://developer.yahoo.com/performance/rules.html


Aggiornamento: Google ha ora una guida eccellente e

http://code.google.com/speed/page-speed/docs/rules_intro.html

Insieme con ancora meglio addon for Firefox. Nei miei test fino ad ora, l'addon di Google Page Speed ​​è di gran lunga migliore rispetto a YSlow. Fornisce un'analisi molto più dettagliata e consigli più intelligenti (piuttosto che raccomandare un CDN per piccoli siti Web come YSlow)

3
  • Utilizzare gli sprite CSS per mantenere il conto alla rovescia della richiesta HTTP.
  • Assicurati che tutte le immagini siano di dimensioni adeguate.
  • Assicurati di avere un host davvero buono con un buon upstream e downstream.
  • Assicurati che il tuo server possa eseguire gli script in tempo utile, puoi verificarlo utilizzando la funzione microtime.
  • Assicurati che il tuo codice sia ottimizzato correttamente.
5

Memorizzazione nella cache del caching.

memcached

APC

Sceglietene uno, usarlo. Non dover recuperare tutto dal database accelera enormemente le cose.

+1

Nota che memcached e APC non si escludono a vicenda: l'utilizzo di APC come cache di opcode non esclude l'utilizzo di memcached. –

+0

Sì, APC dovrebbe essere sicuramente utilizzato come opcode, ma in realtà supporta anche i dati di memorizzazione nella cache, molte persone non si rendono conto. http://php.net/apc_add http://php.net/apc_fetch –

15

Uno strumento utile è YSlow che è uno strumento di Yahoo che consente di identificare i problemi di prestazioni delle pagine Web. Inoltre, Yahoo Best Practices for Speeding Up Your Web Site è una buona lista.

Tuttavia, vedere il blog di Jeff Yahoo's problems are not your problems per una certa prospettiva su questo problema.

+0

+1 per i problemi di Yahoo non sono i tuoi problemi. –

+0

idem Sean's commment. –

+0

+1 per il collegamento al blog di Jeff. – altermativ

2

Scrivere un piccolo codice se necessario, ma non troppo poco.

Meno codice, meno da compilare, meno da inviare, meno da ricevere, meno da elaborare, meno da visualizzare.

+0

+1 layout più chiaro/meno rumore alla fine – Niteriter

1

Utilizzare un profiler per PHP per assicurarsi che il codice sia in esecuzione a una velocità accettabile. Refactor (ove possibile) se le prestazioni potrebbero essere migliorate.

1

Alcuni punti casuali.

Renderizzare progressivamente anziché costruirlo in memoria e inviare alla fine dà un'impressione distinta di velocità.

Ci sono alcuni trucchi di memorizzazione nella cache avanzati che è possibile eseguire, ad esempio una cache di inoltro (questo è ciò che Akamai fa su grande scala) e la separazione di contenuto statico e dinamico.

Con PHP in particolare, fare attenzione a copiare enormi quantità di dati in giro. PHP 4 è noto per questo perché è "copia di default", ma è ancora troppo facile avere enormi quantità di dati in PHP 5. In altre parole: non copiare (o creare!) Stringhe, array e oggetti inutilmente; lavorare con loro sul posto e passare invece i riferimenti.

0

in aggiunta a quanto già detto:

  • Oscurazione e comprimere il css
  • offuscare e comprimere i javascript
  • meno file == richieste http meno == sito più veloce == mettere tutte le css in un file, metti tutto il tuo javascript in un file
+0

Il javascript compresso deve essere decompresso un po 'di tempo. Nel runtime dei browser javascript, questo è tutt'altro che veloce. Utilizzare invece la compressione del livello http. – troelskn

+0

Eh? Il javascript compresso non è illeggibile dall'interprete. Elimina solo tutti gli spazi, le schede, ecc. E sostituisce le variabili locali in modo che invece di "miaVariabile" abbia "a". La compressione HTTP d'altra parte NON DEVE essere decompressa dal browser ed è una (molto piccola) tassa sulle risorse. –

+0

Depends. Giuro di aver visto qualche "compressione javascript" che prende il tuo JS, ha una compressione "reale", Base64 lo codifica e memorizza il casino come una variabile javascript. Questo o io sono pazzo. –

1

Comprimi tutti i tuoi file, inclusi i file css e js comprimi anche i tuoi file php. Effettua il numero minimo di chiamate al database e, come indicato in precedenza, memorizza tutti i resi.

+0

Accetto. Una chiamata al database che restituisce più set di risultati è migliore rispetto a diverse chiamate di database separate. – Kristen

3

1) mod_gzip/mod_deflate! Questa è una soluzione così semplice Sono sorpreso che non sia attivo di default.

2) Gioca con i tuoi URL in modo da poter dire ai browser di memorizzare per sempre i tuoi file JS e CSS. In altre parole, costruire l'URL per assomigliare:

http://www.yourdomain.com/js/mad_scriptz-v123.js 

Quindi utilizzare mod_rewrite e nella Striscia di fuori del "-v123":

<IfModule mod_rewrite.c> 
    # http://www.thinkvitamin.com/features/webapps/serving-javascript-fast 
    RewriteEngine on 

    RewriteRule ^/(.*)\-v[0-9.]+\.(css|js|gif|png|jpg|xap)$ /$1.$2 [L] 

</IfModule> 

Ora Apache andrà alla ricerca di "/js/mad_scriptz.js "... Ogni volta che si modifica il contenuto statico, basta aumentare il numero di versione per forzare i browser a ricaricare il contenuto. Di solito ho una variabile template che contiene un numero di versione globale a cui tutto è legato. Non il più efficiente, ma funziona per i miei scopi. Se riesci a legare il numero di versione al tuo sistema di compilazione o un hash del file, sarebbe più dolce.

Get mod_expires così tutte le tue cose statica scade anni da oggi:

<IfModule mod_expires.c> 
    ExpiresActive On 
    # all in seconds... 
    ExpiresByType image/x-icon A2592000 
    ExpiresByType image/gif A2592000 
    ExpiresByType image/jpeg A2592000 
    ExpiresByType image/png A2592000 
    ExpiresByType application/javascript A2592000 
    ExpiresByType application/x-javascript A2592000 
    ExpiresByType application/x-shockwave-flash A2592000 
    ExpiresByType application/pdf A2592000 
    ExpiresByType text/css A2592000 
    ExpiresByType application/rdf+xml A1800 
</IfModule> 

Aggiornamento: E 'stato notato che non tutti i browser o motori di ricerca come contenuti compresso con gzip. Non accenderlo alla cieca come suggerisco sopra. Assicurati di non alimentare i browser antichi gzip, anche se lo accettano (alcuni di loro diventeranno pissy con javascript compresso). La documentazione per mod_gzip e mod_deflate entrambi hanno esempi che dovrebbero funzionare bene (presumo che lo facciano, o la gente li manderebbe via email con le modifiche :-).

Vorrei anche dire che è stata la mia esperienza che se hai un proxy inverso tra i tuoi server Apache mod_gzip e il mondo, devi stare attento. Squid 2.6 spesso ingannare Apache in roba non gziping quando dovrebbe e, peggio, memorizzerà nella cache le versioni non compresse e le invierà ai browser in grado di gestire i contenuti di gzip. Non so se 3.0 corregge questo e non so se c'è qualcosa di sbagliato nella mia configurazione (ne dubito). Stai attento :-)

Detto questo. Accendilo. Seriamente :-)

+0

mod_gzip/mod_deflate non è attivato per impostazione predefinita per un buon motivo: non tutti i principali browser lo supportano in modo impeccabile. Usare con cautela. Se inizi a ricevere reclami o (più probabilmente) una diminuzione del traffico senza una parola da parte degli utenti, disattivala. In caso contrario, sii felice che i tuoi utenti utilizzino browser intelligenti. –

+0

Questo è molto vero. –

1

Yahoo: "Metti i fogli di stile nella parte superiore", "Inserisci gli script nella parte inferiore".

Questo ha velocizzato il mio sito recente più di ogni altra ottimizzazione.

0

Ecco un suggerimento che trovo sempre utile: Se si dispone di molte immagini minuscole, inserirle tutte in un'unica immagine affiancata. Nelle vostre dichiarazioni CSS, controllare la finestra dell'elemento HTML manipolando le coordinate X e Y dello sfondo:

.icon { 
    background-image:url(static/images/icons.png); 
    height:36px; 
    width:36px; 
} 
.food { 
    background-position:-52px -8px; 
} 
.icon_default { 
    background-position:-184px -96px; 
} 

Le piastrelle può essere fatto in script Python, oa mano se si dispone di un set gestibile.

Gmail fa anche questo. Vedere:! http://mail.google.com/mail/images/2/5/greensky/icons7.png

0

Un progetto che aiuta con alcuni dei punti nelle linee guida di Yahoo 's (http://developer.yahoo.com/performance/rules.html) è Minify che impiega minification, pacchetto di accorpamento e HTTP condizionale servire nello stesso spazio, utilizzato con le buone pratiche di progettazione può significativamente ridurre i carichi di pagina, in particolare l'esperienza utente (che differisce dai tempi di caricamento della pagina).

Problemi correlati