Quanto è importante la velocità di caricamento di un sito?
Nell'intervento verranno presentate l’insieme delle best practices da utilizzare per rendere il sito il più veloce e performante possibile. E’ inutile avere un sito bello se poi una pagina impiega 10 secondi per essere caricata, o se il server non riesce a gestire più di 20 utenti contemporaneamente. All'interno è presente anche un case study di un sito reale con gli ottimi risultati ottenuti.
Seo on site - La stai facendo nel modo giusto? | GT Conference Torino 2013
50 tips su Web Performance Optimization per siti ad alto traffico @ WpCamp Bologna 2013
1. 50 tips su Web Performance
Optimization per siti ad alto traffico
di ANDREA CARDINALI
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013
@WORDCAMPBOLOGNA # WPCAMPBO13
2. “If it is fast and ugly, they will use it
and curse you;
if it is slow, they will not use it”
David Cheriton
(Docente Univ.Stanford)
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
3. WEB PERFORMANCE OPTIMIZATION
PERCHE’ LA VELOCITA’ E’ IMPORTANTE?
• Migliora la User Experience
• Diminuisce il bounce rate (tasso d’abbandono)
• Aumentano le pageviews ( a parità di tempo speso sul sito)
• Aumentano le conversioni (soprattutto negli ecommerce)
• Diminuiscono i costi (hardware e banda)
Inoltre…
E’ un fattore di ranking
“You may have heard that here at Google we're obsessed with speed, in our
products and on the web. As part of that effort, today we're including a new
signal in our search ranking algorithms: site speed.”
Amit Singhal & Matt Cuts - 09 Aprile 2010
http://googlewebmastercentral.blogspot.it/2010/04/using-site-speed-in-web-search-ranking.html
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
4. WEB PERFORMANCE OPTIMIZATION
QUANTO VELOCE?
LA RISPOSTA E’ NELLA PSICOLOGIA UMANA.
L’utente arriva sul nostro sito con un intento ben preciso.
Memoria a breve termine limitata: più aspettiamo, più il compito da eseguire risulta
difficile.
Bisogno di controllo: l’attesa e l’impossibilità di controllare la situazione genera
frustrazione e ansia.
3 LIMITI PER I TEMPI DI RISPOSTA:
0.1 secondi – risposta istantanea
1 secondo – l’utente percepisce un ritardo e sa che è dovuto al computer che sta
elaborando le informazioni e quindi il flusso dei pensieri non viene interrotto.
10 secondi – Tempo massimo per mantenere l’attenzione dell’utente. L’utente non ha il
controllo su quello che sta accadendo e inizia a crescere il senso di frustrazione.
ABBANDONO DEL SITO
Fonte: Jackob Nielsen http://www.nngroup.com/articles/website-response-times/
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
5. WEB PERFORMANCE OPTIMIZATION
QUANTO VELOCE? (NEL MONDO REALE)
GLOBALE:
DESKTOP: 2,8 sec
MOBILE: 4,5 sec
ITALIA:
DESKTOP: 3,4 sec
MOBILE: 5,6 sec
DESKTOP: <15% 1sec
Fonte: http://analytics.blogspot.it/2012/04/global-site-speed-overview-how-fast-are.html
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
6. WEB PERFORMANCE OPTIMIZATION
DA COSA DIPENDE LA VELOCITA’?
Potenza dell’hardware?
Velocità del database?
Velocità del codice?
http://www.stevesouders.com/blog/2012/02/10/the-performance-golden-rule/
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
8. WEB PERFORMANCE OPTIMIZATION
90 % DEL TEMPO DI CARICAMENTO
È UTILIZZATO PER LE RISORSE ESTERNE
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
9. WEB PERFORMANCE OPTIMIZATION
http://www.stevesouders.com/blog/2012/02/10/the-performance-golden-rule/
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
10. WEB PERFORMANCE OPTIMIZATION
http://www.stevesouders.com/blog/2012/02/10/the-performance-golden-rule/
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
12. WEB PERFORMANCE OPTIMIZATION
COME VELOCIZZARE IL SITO?
1. Ridurre il peso della pagina e delle risorse che la compongono
• Minify
• Immagini ottimizzate
• Compressione gzip
2. Ridurre il n° di richieste http
3. Parallelizzare il download
4. Caching
5. Lazy Loading (principalmente immagini)
6. Ritardare l’esecuzione degli script non fondamentali (es. social buttons)
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
13. WEB PERFORMANCE OPTIMIZATION
ELABORAZIONE PAGINA HTML
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
14. WEB PERFORMANCE OPTIMIZATION
ANALISI PERFORMANCE
Metrica Valore
Load time 3,62 sec
Peso 560kb
N° richieste http 25
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
15. WEB PERFORMANCE OPTIMIZATION
DIMINUIRE PESO DELLA PAGINA
• Minify html
• Minify js
• Minify css
• immagini ottimizzate (Yahoo smush.it)
• non scalare immagini con html
RISORSE UTILI:
http://www.minifycss.com/css-compressor/
http://refresh-sf.com/yui/ (YUI Compressor)
http://jscompress.com/
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
16. WEB PERFORMANCE OPTIMIZATION
RIDURRE RICHESTE HTTP
• combine dei files
• combine intelligente
• css sprites
• utilizzare @media print invece di un foglio di stile per la stampa
• image inline (data uri)
• css3 per sfondi con gradient
ATTENZIONE: Immagini inline non supportate da <IE7
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
17. WEB PERFORMANCE OPTIMIZATION
VELOCIZZARE IL RENDERING DELLA PAGINA
• Css nell’header
• Script nel footer
• Diminuire il numero di elementi del DOM
• Script eseguiti al .load() invece che al .ready().
• Lazy load Immagini
• Script che interagiscono con il DOM devono utilizzare selettori efficienti
• Script asincroni
• Regole css efficienti
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
18. WEB PERFORMANCE OPTIMIZATION
ANALISI PERFORMANCE
Metrica Valore
Load time 3,60 sec
Peso 546kb
N° richieste http 16
Diminuito # richieste
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
19. WEB PERFORMANCE OPTIMIZATION
PARALLELIZZARE DOWNLOAD
CSS IN CIMA (NELL’HEAD)
• vengono scaricati in parallelo
• permettono al browser di eseguire più velocemente il rendering della pagina
JAVASCRIPT IN FONDO (ideale prima di </body> o comunque dopo i css)
• bloccano il rendering della pagina
• vengono scaricati ed eseguiti
• caricarli solo dove necessario
add_action(‘wp_enqueue_scripts’,’crd_registra_js’);
function crd_registra_js()
{
$path=get_template_directory_uri().'/assets/js/’;
wp_register_script(‘myscript’,‘script.min.js', array('jquery'),null, true);
//5 parametro per caricare lo script nel footer
if(is_page())
{
wp_enqueue_script(‘myscript’);
}
}
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
20. WEB PERFORMANCE OPTIMIZATION
PARALLELIZZARE DOWNLOAD - 2
• Utilizzare domini diversi Browser N° max per host *
• Utilizzare librerie ospitate su domini esterni
IE <8 2
• Utilizzare Fake CDN [link a post]
IE 8 -9 6
ATTENZIONE: numero max di connessioni /host IE 10 8
Chrome 6
FF 6
Non utilizzare più di 3-4 domini differenti
add_action('wp_enqueue_scripts',’crd_inizializza_js'));
function crd_inizializza_js()
{
wp_deregister_script('jquery‘);
wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/j
query/1.8.3/jquery.min.js',null,null,true);
}
Elenco completo: http://www.browserscope.org/?category=network
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
21. WEB PERFORMANCE OPTIMIZATION
ABILITARE COMPRESSIONE GZIP
• Riduce notevolmente il peso della pagina (anche del 80%)
• Vantaggi maggiori sui files con contenuto testuale
Abilitare compressione su Apache: [link]
ABILITARE SU APACHE
Inserire nel .htaccess
Meglio se in httpd.conf (più performante)
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain
text/xml text/css application/x-javascript
application/javascript
</IfModule>
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
22. WEB PERFORMANCE OPTIMIZATION
ANALISI PERFORMANCE
Metrica Valore
Load time 2,9 sec
Peso 228kb
N° richieste http 13
Metrica Valore
Load time -17 %
Peso -43 %
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
23. WEB PERFORMANCE OPTIMIZATION
ABILITARE KeepAlive
• Creare una nuova connessione http è dispendioso (tempo e risorse)
• Una singola connessione http viene utilizzata per rispondere a più richieste
Abilitare KeepAlive su Apache (httpd.conf)
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 30
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
24. WEB PERFORMANCE OPTIMIZATION
ANALISI PERFORMANCE -KEEPALIVE
Metrica Valore
Load time 2,79 sec
Peso 228kb
N° richieste http 13
Metrica Valore
Load time -9,6 %
Peso -
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
25. WEB PERFORMANCE OPTIMIZATION
DOMINI COOKIELESS PER RISORSE STATICHE
Nel caso utilizziate una fake cdn, mpostare in wp-config il solo dominio principale.
define ('COOKIE_DOMAIN', 'www.domain.com');
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
26. WEB PERFORMANCE OPTIMIZATION
CACHING DELLE RISORSE STATICHE
VANTAGGI
• Caricamenti successivi della pagina (o del sito) molto più veloci
• Si risparmia banda
-98 %
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
27. WEB PERFORMANCE OPTIMIZATION
IMPOSTARE IL CACHING
• La query string nell’url della risorsa impedisce il caching
ERRATO (NON CORRETTO):
wp_enqueue_script (‘myscript’,$path.’script.js’);
<script src='/wp-content/themes/test/script.js?ver=3.5.1'></script>
CORRETTO:
wp_enqueue_script (‘myscript’,$path.’script.js’,false,null);
<script src='/wp-content/themes/test/script.js'></script>
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
28. WEB PERFORMANCE OPTIMIZATION
ABILITARE CACHING APACHE
• Con Apache, necessario mod_header e mod_expires
<IfModule mod_headers.c>
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|cur)$">
Header unset ETag
FileETag None
#caching per un mese
Header set Cache-Control "max-age=2678400, public"
</FilesMatch>
</IfModule>
Se il vostro sito utilizza un solo server si possono abilitare gli ETAG
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
29. WEB PERFORMANCE OPTIMIZATION
DEFER JAVASCRIPT (SOCIAL BUTTONS)
non caricarli al document ready
Soluzioni:
• setTimeout
• immagine statica sostituita all’hover dai widget (mashable.com)
• cambio viewport
• mia con getScript
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
33. WEB PERFORMANCE OPTIMIZATION
CACHING IN WORDPRESS
TRANSIENT API
• Utile per salvare il risultato di elaborazioni lunghe (richieste http, query complesse)
• Persistente: viene salvato in wp_options come array serializzato
set_transient(‘nome_valore’, $valore, $scadenza)
get_transient (‘nome_valore’)
WP_Object_Cache
• Non persistente di default (viene eliminato alla fine del ciclo di vita della pagina)
• Diversi plugin (W3TC, APC Object Cache, WP File Cache) la rendono persistente
wp_cache_*
http://codex.wordpress.org/Transients_API http://codex.wordpress.org/Class_Reference/WP_Object_Cache
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
34. WEB PERFORMANCE OPTIMIZATION
APC (ADVANCED PHP CACHING)
• Php è un linguaggio interpretato
• APC salva l’opcode in RAM
• WP supporta APC a livello di Object Cache (http://wordpress.org/extend/plugins/apc/)
• W3TC supporta APC a tutti i livelli (Db,Page,Object)
http://pecl.php.net/package/APC
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
36. WEB PERFORMANCE OPTIMIZATION
APC (BENCHMARK)
1
3
2
Configurazione Req/sec. Aumento
Default (Apache + php) 3,37 -
APC On (solo opcode) 8 +237%
APC + Object Cache 65 +2000%
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
37. WEB PERFORMANCE OPTIMIZATION
ANALISI PERFORMANCE - APC
Metrica Valore
Load time 1,97 sec
Peso 277kb *
N° richieste http 13
Metrica Valore
Load time -7,5 %
Peso -
Response time -57%
* Il peso è aumentato perché è stata aggiunta un immagine. Ininfluente ai fini del test
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
38. WEB PERFORMANCE OPTIMIZATION
CONFRONTO RESPONSE TIME
APC OFF: 902 ms
-57 %
APC OFF: 396ms
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
39. WEB PERFORMANCE OPTIMIZATION
MYSQLND
• Disponibile a partire da php 5.3
• Default per php 5.4
• Ottimizzata per php (non è general purpose come mysqlibclient)
• Utilizza la il 50% in meno di memoria rispetto a php-mysql
• Su PECL c’è un estensione (mysqlnd_qc) per il caching delle query tramite apc
http://dev.mysql.com/downloads/connector/php-mysqlnd/
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
40. WEB PERFORMANCE OPTIMIZATION
• Di default (ovvero senza tuning) è in grado di gestire 10k connessioni simultanee con
circa 2M di RAM (chiedete di fare lo stesso ad Apache)
• Può essere utilizzato come reverse proxy, web server o entrambi
• Utilizzato da wordpress.com, gravatar. com, cloudflare,pinterest, andreacardinali.it :)
http://nginx.com/cs/nginx-automattic.html
http://codex.wordpress.org/Nginx
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
41. WEB PERFORMANCE OPTIMIZATION – STRUMENTI BENCHMARKING
PLUGIN BROWSER
• Yslow
• Google Page Speed
SERVIZI ONLINE
• http://www.loadimpact.com (test di carico con connessione contemporanee)
• http://www.gtmetrix.com (confronta i risultati di Yslow e Google Page Speed)
• http://tools.pingdom.com
JAVASCRIPT
• Google Analytics (_trackPageSpeed)
• New Relic (RUA: Real User Monitoring: aggiunge un file js in fondo ad ogni pagina)
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
42. WEB PERFORMANCE OPTIMIZATION – NEW RELIC
• Installazione in 5 minuti
• Real time
• Pagine più lente
• Query più dispendiose
• Storico
http://newrelic.com
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
43. WEB PERFORMANCE OPTIMIZATION – CLOUD FLARE
• cdn automatico per pagine e contenuti statici con data center in 23 stati
• Dns anycast
• Threats protection
• Caching automatico
• Implementazione tutte le best practices esposte
• Combine, minify,gzip ecc..
http://www.cloudflare.com/
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
44. WEB PERFORMANCE OPTIMIZATION – MOD PAGE SPEED
• Fa tutto lui
• Modulo x Apache ed Nginx
• 40 filtri configurabili
https://developers.google.com/speed/pagespeed/mod?hl=it
http://seoblog.giorgiotave.it/sito-veloce-mod-pagespeed/2770
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13