Every millisecond counts: Techniques, strategies, and tools for a Web Performance Jedi Wannabe -...
-
Upload
codemotion -
Category
Technology
-
view
116 -
download
0
Transcript of Every millisecond counts: Techniques, strategies, and tools for a Web Performance Jedi Wannabe -...
Every millisecond counts: Techniques, strategies, and tools for a Web Performance Jedi Wannabe
Marco CasarioCTO Comtaste - [email protected]
Friday, March 27, 15
Chi sono
Www.Marcocasario.Com 2
Marco Casario
CTO Comtaste
www.linkedin.com/in/marcocasario
Friday, March 27, 15
How to op?mize
The Speed Index
Www.Marcocasario.Com 28
https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index
Friday, March 27, 15
How to op?mize
Www.Marcocasario.Com 28
The Speed Index is the "area above the curve" calculated in ms and using 0.0-1.0
for the range of visually complete.
Friday, March 27, 15
How to op?mize
Www.Marcocasario.Com 28
http://www.webpagetest.org/video/compare.php?tests=140410_4Y_KVY-r:1-c:0
Friday, March 27, 15
How to op?mize
What does it happen when there is a gap in the bandwidth
chart ?
Www.Marcocasario.Com 28
Friday, March 27, 15
How to op?mize
Focus on:
the speed index valuethe total load time
the render timethe bandwidth
Www.Marcocasario.Com 28
Friday, March 27, 15
Slow performance
Www.Marcocasario.Com 28
credit to: http://www.webperformancetoday.com/2011/11/23/case-study-slow-page-load-mobile-business-metrics/
Friday, March 27, 15
Red Label ?!?!
Www.Marcocasario.Com 28
credit to: http://searchengineland.com/google-testing-red-slow-label-search-results-slower-sites-215483
Google Search Results
Experimental
Friday, March 27, 15
Quali sono le metriche
Www.Marcocasario.Com 28
Response Time
Start Render
Above the Fold
Load Time
Time to Interact
Tempo di una HTTP requestPrimi dati caricati e inizio renderingPrimi dati da mostrare senza usare scrollbar DOMContentLoaded event loadedCall-to-Action per l’utente
Friday, March 27, 15
Percezione
Www.Marcocasario.Com 28
Percezione della velocità e delle perfomance da parte degli utenti.
Friday, March 27, 15
Percezione
Www.Marcocasario.Com 28
Gli utenti vogliono sapere di avere il
controllo.
Friday, March 27, 15
Percezione
Www.Marcocasario.Com 28
L’apertura delle porte del treno è
regolata dal guidatore, non
dal passeggero!
Friday, March 27, 15
Percezione
Www.Marcocasario.Com 28
http://www.nytimes.com/2012/08/19/opinion/sunday/why-waiting-in-line-is-torture.html
Friday, March 27, 15
Be in control
Www.Marcocasario.Com 28
Gli utenti vogliono sapere di avere il controllo.
Perchè riduce lo stress.
Friday, March 27, 15
Be in control
Www.Marcocasario.Com 28
Ecco lo stress degli utenti.credit to: Jakob Nielsen Study
Friday, March 27, 15
La soglia da superare
Www.Marcocasario.Com 28
La barriera dei 1000 msperchè non di meno o di più?
Friday, March 27, 15
Definire il contesto
Come percepiamo il tempo
Www.Marcocasario.Com 28
Quindi la nostra web app deve stare sui 1000ms
Friday, March 27, 15
Performance e Percezione
Www.Marcocasario.Com 28
Percezione delle Performance è funzione di:
Performance Attese UX & UI
Performance Reali( )Friday, March 27, 15
UX & UI
Www.Marcocasario.Com 28
UX & UI
E’ questo l’aspetto su cui andare a ragionare per
ottimizzare le performance
Friday, March 27, 15
UX & UI
Www.Marcocasario.Com 28
Chi è responsabile della UX & UI ?
Backend DevelopersFrontend Developers
Project Managers Information ArchitectUX & UI Designers
Friday, March 27, 15
Definire il contesto
Attenzione.Anche essere troppo veloci
potrebbe creare problemi agli utenti.
Www.Marcocasario.Com 28
Friday, March 27, 15
Definire il contesto
Attenzione.Le aspettative dell’utente sono
diverse dalle performance tecniche.
Www.Marcocasario.Com 28
Friday, March 27, 15
Definire il contesto
Esperienza Utente è funzione di:
Www.Marcocasario.Com 28
( )Performance PercepiteCompletamento Task
Friday, March 27, 15
1000ms
Obiettivo: 1000ms
1. Efficienza del traffico sul network
2. Critical rendering path
Www.Marcocasario.Com 28
Friday, March 27, 15
Bandwidth o Loading Time
Ottimizzare Traffico Network
Non è la Bandwidth il nostro nemico.
Sono i tempi di attesa che il network si prende per caricare le
risorse
Www.Marcocasario.Com 28
Friday, March 27, 15
Bandwidth o Loading Time
Ciclo di vita di una HTTP request
Www.Marcocasario.Com 28
Friday, March 27, 15
How to op?mize
Www.Marcocasario.Com 28
600 ms of time has already been used up by network overhead: a DNS lookup to resolve the hostname (e.g. google.com) to an IP address, a
network roundtrip to perform the TCP handshake, and finally a full network roundtrip to send the HTTP request. This leaves us with just 400 ms!
Friday, March 27, 15
Cosa fare
Ottimizzare Traffico Network
Ridurre gli RTT (Round Trip Time)Usare risorse caricate da CDNRidurre i bytes caricati non necessariUsare tecniche di caching content
Www.Marcocasario.Com 28
Friday, March 27, 15
Cosa fare
Ottimizzare Traffico Network
Eliminare i redirectsRidurre i DNS lookupComprimere risorse con GZip
Www.Marcocasario.Com 28
Friday, March 27, 15
Cosa fare
E le immagini ?
Www.Marcocasario.Com 28
Comprimi.Sprite Image.Icon Fonts.Strategia per le responsive image.Server Side Responsive.
Friday, March 27, 15
Cosa fare
Cos’è il Critical Rendering Path
<!DOCTYPE html><html><head><meta charset="UTF-‐8"><title>Title of the document</title></head>
<body>Content of the document......</body>
</html>
Www.Marcocasario.Com 28
Friday, March 27, 15
Cosa fare
<!DOCTYPE html><html><head><meta charset="UTF-‐8"><title>Title of the document</title></head>
<body>Content of the document......</body>
</html>
Www.Marcocasario.Com 28
Pagina Bianca.Vengono inviati i primi datiNon c’è nessun rendering (no CSS)
Friday, March 27, 15
Cosa fare
<!DOCTYPE html><html><head><meta charset="UTF-‐8"><title>Title of the document</title>
<link rel="stylesheet" href="styles.css"></head>
<body>Content of the document......</body>
</html>
Www.Marcocasario.Com 28
Pagina Bianca.DOM caricato. In attesa dei CSS
Friday, March 27, 15
Cosa fare
<!DOCTYPE html><html><head><meta charset="UTF-‐8"><title>Title of the document</title>
<link rel="stylesheet" href="styles.css"></head>
<body>Content of the document......</body>
</html>
Www.Marcocasario.Com 28
Pagina Bianca.Primo pacchetto di dati CSS caricati. Waiting.
h1 { color:blue; font-‐family:verdana; font-‐size:300%;}
Friday, March 27, 15
Cosa fare
<!DOCTYPE html><html><head><meta charset="UTF-‐8"><title>Title of the document</title>
<link rel="stylesheet" href="styles.css"></head>
<body>Content of the document......</body>
</html>
Www.Marcocasario.Com 28
Pagina Bianca.Caricamento CSS terminato. Il browser può iniziare il rendering.
h1 { color:blue; font-‐family:verdana; font-‐size:300%;}
Friday, March 27, 15
Cosa fare
<!DOCTYPE html><html><head><meta charset="UTF-‐8"><title>Title of the document</title>
<link rel="stylesheet" href="styles.css"></head>
<body>Content of the document......</body>
</html>
Www.Marcocasario.Com 28
Primi elementi di pagina caricati.Caricamento CSS terminato. Start rendering.
h1 { color:blue; font-‐family:verdana; font-‐size:300%;}
Friday, March 27, 15
Cosa fare
Questo processo va sotto il nome di Critical Rendering Path
Www.Marcocasario.Com 28
Friday, March 27, 15
Cosa fareCome trovare il Critical Rendering
Path?
Www.Marcocasario.Com 28
DevTools: AUDIT Individua i CSS da dichiarare inline
Friday, March 27, 15
Javascript e Cri?cal Rendering Path
E Javascript ?
JavaScript can change all the HTML elements in the pageJavaScript can change all the HTML attributes in the page
JavaScript can change all the CSS styles in the pageJavaScript can remove existing HTML elements and attributes
JavaScript can add new HTML elements and attributesJavaScript can react to all existing HTML events in the page
JavaScript can create new HTML events in the page
Www.Marcocasario.Com 28
Friday, March 27, 15
Javascript e Cri?cal Rendering Path
<script>
document.getElementById("demo").innerHTML = "Hello World!";
document.getElementById("p2").style.color = "blue";
</script>
Www.Marcocasario.Com 28
Javascript può bloccare la costruzione del DOM
E può bloccare i CSS
Friday, March 27, 15
Fourth-‐party libraries
Www.Marcocasario.Com 28
4th-party calls ?? WTF ?!?!
<iframe src=”https://secure.img-cdn.mediaplex.com/0/932/home_page.html?Home=0 &mpuid=Wednesday, July 13, 2011 at 16:49:10 EDT” HEIGHT=”1″ WIDTH=”1″
FRAMEBORDER=”0″ ></iframe>
Questa chiamata si porta dietro una cascata di chiamate ad altre librerie e risorse di terze parti (non direttamente autorizzate da voi).
Friday, March 27, 15
Third-‐party libraries
Www.Marcocasario.Com 28
Aumento del peso della paginaAumento numero delle connessioniAggiunta di latenzaCambiamenti di comportamento senza avvisiPossono compromettere la user security/privacy
Aumentano anche le probabilità di un Point of Failure
Friday, March 27, 15
Third-‐party libraries
Www.Marcocasario.Com 28
Detects likely third-party SPOF as you browse and allows you to Simulate 3rd party resources
being unavailable.
SPOF-O-Matic
Chrome Extension
Friday, March 27, 15
Third-‐party libraries
Www.Marcocasario.Com 28
Se la libreria caricata non interagisce con nessun elemento
della vostra pagina, considerate di caricarla all’interno di un IFRAME.
In questo modo il caricamento sarà asincrono.
Friday, March 27, 15
Third-‐party libraries
Www.Marcocasario.Com 28
Tieni le 3rd party calls fuori dalla dichiarazione dell’<head>
Fuori dall’Above the fold
Friday, March 27, 15
Best Prac?ces#2 Carica prima il contenuto e il CTA poi gli elementi di navigazione
Www.Marcocasario.Com 28
Caricamento elementi di navigazione Contenuto
Friday, March 27, 15
Best Prac?ces#3 Evitare Popup, overlay o Install App spam che bloccano la pagina
Www.Marcocasario.Com 28
Friday, March 27, 15
Best Prac?ces#4 Studia il waterfall delle network activities per capire il problema
Www.Marcocasario.Com 28
Time to First Byte
DNS Lookup
TCP Connection
Friday, March 27, 15
Best Prac?ces#5 Web Performance API
Www.Marcocasario.Com 28
Navigation Timing
var perfData = window.performance.timing; var pageLoadTime = perfData.loadEventEnd -‐ perfData.navigationStart;
var connectTime = perfData.responseEnd -‐ perfData.requestStart;
var SSLTime = perfData.connectEnd -‐ perfData.secureConnectionStart;
Tempo totale caricamento pagina
Tempo totale request response
Tempo totale per connessione SSL
Friday, March 27, 15
Best Prac?ces#5 Web Performance API
Www.Marcocasario.Com 28
Navigation Timing
Calcolo del tempo totale a caricare tutte le risorse di una pagina (css, js, img..)
Friday, March 27, 15
Best Prac?ces#5 Web Performance API
Www.Marcocasario.Com 28
Navigation Timing
Tempo impiegato a caricare le 10 immagini più lente caricate dalla pagina
Friday, March 27, 15
Best Prac?ces#6 Smart Caching strategy
Www.Marcocasario.Com 28
Aggiungere il timestamp all’url, creato dinamicamente dal server, ogni volta che
viene fatto nuovo update sulla pagina.
Se non viene fatto nessun update, il timestamp, e quindi l’url, sarà cachato
Friday, March 27, 15
Best Prac?ces#7 Gestione delle Ads
Www.Marcocasario.Com 28
Togliere le Ads dal markup di pagina altrimenti bloccano il rendering.
Inserire le ads in un IFRAME per sfruttare il loading parallelo
Attenzione a come alcuni browser gestiscono l’history degli IFRAME
Friday, March 27, 15
Best Prac?ces#8 Evitare i movimenti di contenuto durante i caricamenti asincroni
Www.Marcocasario.Com 28
A volte caricando tutti i contenuti in maniera asincrona la pagina ha dei
movimenti fastidiosi perchè sposta gli elementi una volta che sono caricati.
Gestite con dei placeholder gli spazi che poi andranno riempiti dal contenuto
Friday, March 27, 15
Best Prac?ces#9 Ottimizzare il Critical Rendering Path
Www.Marcocasario.Com 28
•Riduci il numero di requests•Rimuovi il JS che blocca il rendering (3rd party, analytics, plugins..) •I CSS e il JS che serve per l’ATF scrivilo inline
HTML è parsato incrementalmente.Il rendering è bloccato dai CSS.
Friday, March 27, 15
Best Prac?ces#9 Ottimizzare il Critical Rendering Path
Www.Marcocasario.Com 28
•Riduci i blocchi di codice monolitici •La maggior parte dei siti usano il 20% delle dichiarazioni CSS•Usa una strategia di cache intelligente
HTML è parsato incrementalmente.Il rendering è bloccato dai CSS.
Friday, March 27, 15
So_ware Latency
<meta name="viewport" content="user-‐scalable=no" />
Www.Marcocasario.Com 28
Esegue il tap event immediatamente, senza aspettare circa 300ms(ma disabilita il pinch to zoom)
#10 Software Latency
Friday, March 27, 15
An?cipare l’utente
<link rel="dns-‐prefetch" href="//host_name_to_prefetch.com">
Www.Marcocasario.Com 28
Pre-risolve i nomi di dominio prima che un utente provi a cliccare su un link.
#11 Predire il futuro
Funziona sulla maggior parte dei browser
Friday, March 27, 15
An?cipare l’utente
<link rel="subresource" href="jquery.js">
Www.Marcocasario.Com 28
Caricamento con priorità alta di risorse all’interno della pagina (il browser consulta prima la cache)
#11 Predire il futuro
Funziona solo su Chrome
Friday, March 27, 15
An?cipare l’utente
<link rel="subresource" href="custom.css">
Www.Marcocasario.Com 28
Download di risorse con priorità bassa. Prefetch di risorse per navigazione futura (messe in cache)
#11 Predire il futuro
Funziona sulla maggior parte dei browser
Friday, March 27, 15
An?cipare l’utente
<link rel="prerender" href="/nextpage.html">
Www.Marcocasario.Com 28
Effettua il prerendering di una pagina in background
#11 Predire il futuro
Funziona sulla maggior parte dei browser
Friday, March 27, 15
Every millisecond counts: Techniques, strategies, and tools for a Web Performance Jedi Wannabe
Marco CasarioCTO Comtaste - [email protected]
Friday, March 27, 15