Every millisecond counts: Techniques, strategies, and tools for a Web Performance Jedi Wannabe -...

90
Every millisecond counts: Techniques, strategies, and tools for a Web Performance Jedi Wannabe Marco Casario CTO Comtaste - [email protected] Friday, March 27, 15

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

I  miei  ul?mi  libri

Www.Marcocasario.Com 3

Friday, March 27, 15

I  miei  corsi

Www.Marcocasario.Com 3

training.codemotion.it

Friday, March 27, 15

Lessons  learned  ...

DISCLAIMER.

Www.Marcocasario.Com 28

Friday, March 27, 15

Www.Marcocasario.Com 28

Previously....

Friday, March 27, 15

Browser’s  rendering  flow

Www.Marcocasario.Com 28

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

Bandwidth + Latency = Performance

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

Www.Marcocasario.Com 28

Friday, March 27, 15

Metrics  &  Context

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

Slow  performance

Www.Marcocasario.Com 28

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

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

Be  in  control

Www.Marcocasario.Com 28

It’s all about Perception.

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

UX  &  UI

Www.Marcocasario.Com 28

Tutti.

Friday, March 27, 15

UX  &  UI

Www.Marcocasario.Com 28

DOMContentLoaded: 10.42s

Friday, March 27, 15

UX  &  UI

Www.Marcocasario.Com 28

DOMContentLoaded: 4.14s

Friday, March 27, 15

UX  &  UI

Www.Marcocasario.Com 28

DOMContentLoaded: 1.02s

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

UX  &  UI

Www.Marcocasario.Com 28

Blogger: processo troppo breve.

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

OVmizzare  la  Latenza

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

Qual’è  il  boZleneck

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

Limi?  Protocollo  HTTP  1.1

Www.Marcocasario.Com 28

Friday, March 27, 15

Cosa  fare

Www.Marcocasario.Com 28

Loading time in blu

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

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

Www.Marcocasario.Com 28

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

Cosa  farePageSpeed lo fa per voi!

Www.Marcocasario.Com 28

Friday, March 27, 15

Cosa  farePageSpeed lo fa per voi!

Www.Marcocasario.Com 28

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

Third-­‐party  calls

Www.Marcocasario.Com 28

Friday, March 27, 15

Third-­‐party  libraries

Www.Marcocasario.Com 28

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  PRACTICES

Friday, March 27, 15

Best  Prac?ces#1 Diminuisci il RTT

Www.Marcocasario.Com 28

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