50 tips su web performance optimization per siti ad alto traffico @ wpcamp bologna 2013
DESCRIPTION
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.TRANSCRIPT
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
50 tips su Web Performance Optimization per siti ad alto traffico
di ANDREA CARDINALI
“If it is fast and ugly, they will use it and curse you;
if it is slow, they will not use it”
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
David Cheriton(Docente Univ.Stanford)
WEB PERFORMANCE OPTIMIZATION
PERCHE’ LA VELOCITA’ E’ IMPORTANTE?
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
• 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
http://googlewebmastercentral.blogspot.it/2010/04/using-site-speed-in-web-search-ranking.html
“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
WEB PERFORMANCE OPTIMIZATION
QUANTO VELOCE?
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
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 istantanea1 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/
WEB PERFORMANCE OPTIMIZATION
QUANTO VELOCE? (NEL MONDO REALE)
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
Fonte: http://analytics.blogspot.it/2012/04/global-site-speed-overview-how-fast-are.html
GLOBALE:DESKTOP: 2,8 secMOBILE: 4,5 sec
ITALIA:DESKTOP: 3,4 secMOBILE: 5,6 sec
DESKTOP: <15% 1sec
WEB PERFORMANCE OPTIMIZATION
DA COSA DIPENDE LA VELOCITA’?
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
http://www.stevesouders.com/blog/2012/02/10/the-performance-golden-rule/
Potenza dell’hardware?
Velocità del database?
Velocità del codice?
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
NO
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
90 % DEL TEMPO DI CARICAMENTO È UTILIZZATO PER LE RISORSE ESTERNE
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
http://www.stevesouders.com/blog/2012/02/10/the-performance-golden-rule/
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
http://www.stevesouders.com/blog/2012/02/10/the-performance-golden-rule/
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
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 http3. Parallelizzare il download4. Caching5. Lazy Loading (principalmente immagini)6. Ritardare l’esecuzione degli script non fondamentali (es. social buttons)
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
ELABORAZIONE PAGINA HTML
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
ANALISI PERFORMANCEMetrica Valore
Load time 3,62 sec
Peso 560kb
N° richieste http 25
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
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/
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
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
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
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
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
ANALISI PERFORMANCEMetrica Valore
Load time 3,60 sec
Peso 546kb
N° richieste http 16
Diminuito # richieste
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
PARALLELIZZARE DOWNLOADCSS 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 footerif(is_page()){wp_enqueue_script(‘myscript’);}
}
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
PARALLELIZZARE DOWNLOAD - 2• Utilizzare domini diversi• Utilizzare librerie ospitate su domini esterni• Utilizzare Fake CDN [link a post]
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/jquery/1.8.3/jquery.min.js',null,null,true);}
Non utilizzare più di 3-4 domini differenti
Browser N° max per host *
IE <8 2
IE 8 -9 6
IE 10 8
Chrome 6
FF 6
Elenco completo: http://www.browserscope.org/?category=network
ATTENZIONE: numero max di connessioni /host
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
ABILITARE COMPRESSIONE GZIP• Riduce notevolmente il peso della pagina (anche del 80%)• Vantaggi maggiori sui files con contenuto testuale
Abilitare compressione su Apache: [link]
<IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript</IfModule>
ABILITARE SU APACHEInserire nel .htaccessMeglio se in httpd.conf (più performante)
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
ANALISI PERFORMANCEMetrica Valore
Load time 2,9 sec
Peso 228kb
N° richieste http 13
Metrica Valore
Load time -17 %
Peso -43 %
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
ABILITARE KeepAlive
KeepAlive OnKeepAliveTimeout 5MaxKeepAliveRequests 30
• 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)
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
ANALISI PERFORMANCE -KEEPALIVEMetrica Valore
Load time 2,79 sec
Peso 228kb
N° richieste http 13
Metrica Valore
Load time -9,6 %
Peso -
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
Nel caso utilizziate una fake cdn, mpostare in wp-config il solo dominio principale.
DOMINI COOKIELESS PER RISORSE STATICHE
define ('COOKIE_DOMAIN', 'www.domain.com');
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
CACHING DELLE RISORSE STATICHEVANTAGGI• Caricamenti successivi della pagina (o del sito) molto più veloci• Si risparmia banda
-98 %
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
IMPOSTARE IL CACHING• La query string nell’url della risorsa impedisce il caching
<script src='/wp-content/themes/test/script.js?ver=3.5.1'></script>
wp_enqueue_script (‘myscript’,$path.’script.js’);
<script src='/wp-content/themes/test/script.js'></script>
wp_enqueue_script (‘myscript’,$path.’script.js’,false,null);
ERRATO (NON CORRETTO):
CORRETTO:
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
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 ETagFileETag None#caching per un meseHeader set Cache-Control "max-age=2678400, public"
</FilesMatch> </IfModule>
Se il vostro sito utilizza un solo server si possono abilitare gli ETAG
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
DEFER JAVASCRIPT (SOCIAL BUTTONS)
non caricarli al document readySoluzioni:• setTimeout• immagine statica sostituita all’hover dai widget (mashable.com)• cambio viewport• mia con getScript
SERVER TUNING
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
CHE COSA CAUSA IL RALLENTAMENTO?
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
CACHING IN WORDPRESS
set_transient(‘nome_valore’, $valore, $scadenza)get_transient (‘nome_valore’)
• Utile per salvare il risultato di elaborazioni lunghe (richieste http, query complesse)• Persistente: viene salvato in wp_options come array serializzato
TRANSIENT API
WP_Object_Cache
wp_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
http://codex.wordpress.org/Transients_API http://codex.wordpress.org/Class_Reference/WP_Object_Cache
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
APC (ADVANCED PHP CACHING)
http://pecl.php.net/package/APC
• 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)
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
APC
http://pecl.php.net/package/APC
PARAMETRI FONDAMENTALI• apc.enabled=1• apc.shm_size• apc.ttl• apc.user_ttl
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
APC (BENCHMARK)
1
23
Configurazione Req/sec. Aumento
Default (Apache + php) 3,37 -
APC On (solo opcode) 8 +237%
APC + Object Cache 65 +2000%
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
ANALISI PERFORMANCE - APCMetrica 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
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
CONFRONTO RESPONSE TIME
APC OFF: 396ms
APC OFF: 902 ms
-57 %
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
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/
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
• 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.htmlhttp://codex.wordpress.org/Nginx
WEB PERFORMANCE OPTIMIZATION – STRUMENTI BENCHMARKING
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
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)
WEB PERFORMANCE OPTIMIZATION – NEW RELIC
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
• Installazione in 5 minuti• Real time• Pagine più lente• Query più dispendiose• Storico
http://newrelic.com
WEB PERFORMANCE OPTIMIZATION – CLOUD FLARE
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
• 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/
WEB PERFORMANCE OPTIMIZATION – MOD PAGE SPEED
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
https://developers.google.com/speed/pagespeed/mod?hl=ithttp://seoblog.giorgiotave.it/sito-veloce-mod-pagespeed/2770
• Fa tutto lui • Modulo x Apache ed Nginx• 40 filtri configurabili
WEB PERFORMANCE OPTIMIZATION
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
DOMANDE?
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13
RELATORE
Andrea Cardinali
Web: www.andreacardinali.it
Twitter: @andreacardinaliGoogle + : Andrea Cardinali
GRAZIE!