Applicazioni HTML5 Superveloci - Salvatore Romeo

118

description

Presentazione di Salvatore Romeo all'evento CreateTheWeb organizzato dalla community HTML5 Italy http://www.meetup.com/HTML5-Italy/

Transcript of Applicazioni HTML5 Superveloci - Salvatore Romeo

Page 1: Applicazioni HTML5 Superveloci - Salvatore Romeo
Page 2: Applicazioni HTML5 Superveloci - Salvatore Romeo

App HTML5 superveloci

Page 3: Applicazioni HTML5 Superveloci - Salvatore Romeo

HTML5 Italy

http://www.meetup.com/HTML5-Italy/

… prossimamente a Milano

Page 4: Applicazioni HTML5 Superveloci - Salvatore Romeo

Di cosa parleremo

?

Page 5: Applicazioni HTML5 Superveloci - Salvatore Romeo

Di cosa parleremo

Page 6: Applicazioni HTML5 Superveloci - Salvatore Romeo

Facebook abbandona HTML5

Perché?

Cosa non ha funzionato?

E’ tutta colpa di HTML5?

Quante persone ha licenziato?

http://www.codefessions.com/2012_08_01_archive.html

Is HTML5 too slow for Facebook?

Page 7: Applicazioni HTML5 Superveloci - Salvatore Romeo

App HTML5 superveloci

Riusciamo a convincere Zuck a tornare sui suoi passi?

Page 8: Applicazioni HTML5 Superveloci - Salvatore Romeo

Sommario

Velocità di download

Velocità di comunicazione client/server

Velocità hardware

Considerazioni generali

Oltre il codice

Page 9: Applicazioni HTML5 Superveloci - Salvatore Romeo

Quale libreria

Minification

Gzip Compression

Embedding

Velocità di download

Page 10: Applicazioni HTML5 Superveloci - Salvatore Romeo

App HTML5 superveloci

Esiste una libreria utile come jQuery, ma molto più performante?

Page 11: Applicazioni HTML5 Superveloci - Salvatore Romeo

Quale libreria

… …

Lib di base Lib grafiche

Page 19: Applicazioni HTML5 Superveloci - Salvatore Romeo

Quale libreria

Minification

Gzip Compression

Embedding

Velocità di download

Page 20: Applicazioni HTML5 Superveloci - Salvatore Romeo

Minification + Gzip

Riusciamo a comprimere i file del 90%?

Page 21: Applicazioni HTML5 Superveloci - Salvatore Romeo

Minification + GZip

1. Rimuovere ciò che non serve (JS e CSS)

2. Offuscare il codice (obfuscation, JS)

Page 22: Applicazioni HTML5 Superveloci - Salvatore Romeo

Minification + GZip

File ridotti in media al

25% originale minified

Page 23: Applicazioni HTML5 Superveloci - Salvatore Romeo

Minification + GZip

Librerie per javascript:

• JSMin

• YUI compressor

• Closure compiler

Librerie per i CSS:

• YUI compressor

• SimpLess

Page 24: Applicazioni HTML5 Superveloci - Salvatore Romeo

Minification + GZip

File ridotti in media al

12% originale minified gzipped

Page 25: Applicazioni HTML5 Superveloci - Salvatore Romeo
Page 26: Applicazioni HTML5 Superveloci - Salvatore Romeo

Quale libreria

Minification

Gzip Compression

Embedding

Velocità di download

YUI compressor

Documentazione del server!!!

Page 27: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

• Asymmetric internet connections

• HTTP over TCP/IPv4 overhead

• Latenza significativa su connessioni mobile

Page 28: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

Upload:Download 1:20

500bytes up ≈ 10kB down

+ 1.5KB a richiesta HTTP

Page 29: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

One shot apps: tutta l’app in una sola richiesta http!

Page 30: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

<div style=“color:red”>ciao</div>

<div

onclick=“javascript:alert()”>ok</di

v>

Page 31: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

Nota sugli sprites CSS:

NON USATELI

Page 32: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

<div style=“color:red”>ciao</div>

<div

onclick=“javascript:alert()”>ok</di

v>

Page 33: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

Page 34: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

<html>

<head>

</head>

<body>

</body>

</html>

<script src=“file.js”></script>

<link rel=“stylesheet” “file.css” />

Page 35: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

<html>

<head>

</head>

<body>

</body>

</html>

<script src=“file.js”></script>

<link rel=“stylesheet” “file.css” />

<script>

//code of the file.js file

</script>

<style>

// style here

</style>

Page 36: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

Manipolazione DOM server side:

– Jsoup in JAVA

– Jquery in NodeJS

–Querypath in PHP

Page 37: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

1 sola richiesta

Page 38: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

<html>

<head>

</head>

<body>

</body>

</html>

Page 39: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

Sprites CSS

background-position: -20px -30px

Page 40: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

Nota sugli sprites CSS:

NON USATELI

Page 41: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

Sprites CSS

background-position: -20px -30px

Page 42: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

<html>

<head>

</head>

<body>

</body>

</html>

Base64

Page 43: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

<html>

<head>

</head>

<body>

</body>

</html>

Base64

<img

src="data:image/

gif;base64,R0lGl…"

width="16“ height="14">

background:url(

data:image/

gif;base64,R0lG1…

Page 44: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

1

2

3

Page 45: Applicazioni HTML5 Superveloci - Salvatore Romeo

Embedding

PRO CONTRO Ottimo per i first time users Non utilizzabile su elementi dinamici

(o forse no?)

Riduzione numero di richieste No cache

Distinguere tra file fissi e dinamici No CDN

Pensare bene a cosa poter caricare dopo per snellire la pagina

Non è consigliabile embeddare troppi file creando pagine complete >100KB

La cache de browser è cancellata su iPhone 4 (e precedenti) quando spento

Page 46: Applicazioni HTML5 Superveloci - Salvatore Romeo

Quale libreria

Minification

Gzip Compression

Embedding

Velocità di download

YUI compressor

Documentazione del server!!!

Jsoup per Java, Jquery per NodeJs

Page 47: Applicazioni HTML5 Superveloci - Salvatore Romeo

App HTML5 superveloci

Velocità di download

Velocità di comunicazione client/server

Velocità hardware

Considerazioni generali

Oltre il codice

Page 48: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità comunicazione

Architetture

Server+DB

Websocket / SPDY

Page 49: Applicazioni HTML5 Superveloci - Salvatore Romeo

Architetture lato client

1

Aggiornamenti totali

Page 50: Applicazioni HTML5 Superveloci - Salvatore Romeo

Architetture lato client

1

2

Aggiornamenti parziali

Page 51: Applicazioni HTML5 Superveloci - Salvatore Romeo

Architetture lato client

1

2

history.pushState(null,null,path)

Page 52: Applicazioni HTML5 Superveloci - Salvatore Romeo

Architetture lato client

history.pushState(null,null,path)

2.2

4

Page 53: Applicazioni HTML5 Superveloci - Salvatore Romeo

Architetture lato client

history.pushState(null,null,path)

2.2

4

Page 54: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità comunicazione

Architetture

Server+DB

Websocket / SPDY

Aggiornamenti parziali (history.pushState)

Page 55: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

E’ arrivato il momento di mandare in pensione

Apache + MySql

Page 56: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

Server + DB

Page 57: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

Server + DB

Client Comunicazione Server

Page 58: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

Server + DB

Client Comunicazione Server

Tempo di elaborazione server + DB

Page 59: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

Server + DB

Client Comunicazione Server

1

2

Page 60: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

Server + DB

Client Comunicazione Server

1

2

Page 61: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

• Un server che non allochi un thread per ogni utente

Page 62: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

• Un server che non allochi un thread per ogni utente

• NodeJS se volete usare Javascript Server Side

• Vert.x se volete usare Java, Ruby, Groovy, Javascript, Scala, Xtend

Page 63: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

<p>Hello World</p>

Page 64: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

<p>Hello World</p>

Richieste fallite

1000000 richieste, 20000 concorrenti

Page 68: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

Apache NodeJs Vert.x

Page 69: Applicazioni HTML5 Superveloci - Salvatore Romeo

Server + DB

Page 71: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità comunicazione

Architetture

Server+DB

Websocket / SPDY

Aggiornamenti parziali (history.pushState)

Vert.x + MongoDB

Page 72: Applicazioni HTML5 Superveloci - Salvatore Romeo

WebSockets / SPDY

• Bassa latenza (non si trasmette l’header)

• Full duplex

• La connessione dura a lungo

• Ideale per notifiche Push

• Il processing time è molto minore

• Crea una connessione su un’altra porta

http://www.youtube.com/watch?v=Z897fkPn7Rw

Page 73: Applicazioni HTML5 Superveloci - Salvatore Romeo

WebSockets / SPDY

• Non utilizzateli ‘nativamente’, ma fate riferimento a librerie che li utilizzano se possibile, altrimenti si servono del classico Ajax

Page 74: Applicazioni HTML5 Superveloci - Salvatore Romeo

WebSockets / SPDY

• AtmosphereJS

• Server ( Java): – onRequest(AtmosphereResource r)

– r.suspend(-1)

– BroadcasterFactory.getDefault()

.lookup()

• Client (JavaScript):

– $.atmosphere.subscribe(request)

https://github.com/Atmosphere/atmosphere

http://dev.chromium.org/spdy

https://developers.google.com/speed/pagespeed

Page 75: Applicazioni HTML5 Superveloci - Salvatore Romeo

Web Sockets

2.2

4

Page 76: Applicazioni HTML5 Superveloci - Salvatore Romeo

Web Sockets

2.2

4

Page 77: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità comunicazione

Architetture

Server+DB

Websocket / SPDY

Aggiornamenti parziali (history.pushState)

Vert.x + MongoDB

AtmosphereJS

Page 78: Applicazioni HTML5 Superveloci - Salvatore Romeo

App HTML5 superveloci

Velocità di download

Velocità di comunicazione client/server

Velocità hardware

Considerazioni generali

Oltre il codice

Page 79: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità hardware

Vogliamo superare le prestazioni di un’app nativa

Page 80: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità hardware

Perché

Animazioni

Canvas

Page 81: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità hardware

Se usate animazioni ed effetti grafici, anche di minima entità, un processore mobile ne risente.

setInterval

animate

Page 82: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità hardware

Perché

Animazioni

Canvas

.animate è troppo lento

Page 83: Applicazioni HTML5 Superveloci - Salvatore Romeo

Animazioni hardware

-webkit-transform: translate3d(0, 0, 0);

-webkit-transition: ALL 0.3s ease-out;

Page 84: Applicazioni HTML5 Superveloci - Salvatore Romeo

Animazioni hardware -webkit-transform: translate3d(0, 0, 0);

-webkit-transition: ALL 0.3s ease-out;

left

background-position-left

Page 85: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità hardware

Perché

Animazioni

Canvas

.animate è troppo lento

Usate le transition3d CSS3

Page 88: Applicazioni HTML5 Superveloci - Salvatore Romeo

Canvas

Pre-rendering:

context.drawImage(m_canvas, 0, 0)

context m_canvas

Page 89: Applicazioni HTML5 Superveloci - Salvatore Romeo

Canvas

Android 2.3

Android 4

Chrome Mobile 16

iPhone 4

iPhone 5

Page 90: Applicazioni HTML5 Superveloci - Salvatore Romeo

Canvas

Partial rendering:

context.fillRect(0, 0,

canvas.width, canvas.height);

Page 91: Applicazioni HTML5 Superveloci - Salvatore Romeo

Canvas

Android 2.3

Android 4

Chrome Mobile 16

iPhone 4

iPhone 5

Page 92: Applicazioni HTML5 Superveloci - Salvatore Romeo

Canvas Big fixed images:

<canvas id="background" width="640" height="480"

style="position: absolute; z-index: 0"> </canvas>

<canvas id="foreground" width="640" height="480"

style="position: absolute; z-index: 1"> </canvas>

background foreground

Page 94: Applicazioni HTML5 Superveloci - Salvatore Romeo

Velocità hardware

Perché

Animazioni

Canvas

.animate è troppo lento

Usate le transition3d CSS3

Ha prestazioni paragonabili a OpenGL

Page 95: Applicazioni HTML5 Superveloci - Salvatore Romeo

App HTML5 superveloci

Velocità di download

Velocità di comunicazione client/server

Velocità hardware

Considerazioni generali

Oltre il codice

Page 96: Applicazioni HTML5 Superveloci - Salvatore Romeo

Responsive layouts: immagini

Richieste statiche

Manipolazione DOM

Pre-load e Post-load

Web Workers

Considerazioni generali

Page 97: Applicazioni HTML5 Superveloci - Salvatore Romeo

• Immagini fisse

• Immagini di contenuto

• Le giuste immagini per il device

– 2x (high density devices)

– 1x

– Thumbs

– Don't Scale Images in HTML

Responsive layouts

Page 98: Applicazioni HTML5 Superveloci - Salvatore Romeo

• Minimizza i cookie inviati al server

• Usa lo storage server-side o client-side per salvare le info dell’utente

• Per le richieste statiche utilizza un sottodominio che non si serve dei cookie

Richieste statiche

Page 99: Applicazioni HTML5 Superveloci - Salvatore Romeo

• Salvate i riferimenti agli elementi che accedete con $(…)

• Aggiornate i nodi “offline” e solo alla fine aggiungeteli al DOM

• Utilizzate CSS per il layout e non JavaScript

Manipolazione DOM

Page 100: Applicazioni HTML5 Superveloci - Salvatore Romeo

Elementi non subito necessari

Elementi necessari tra poco

Post-load & Pre-load

Page 101: Applicazioni HTML5 Superveloci - Salvatore Romeo

• E’ come un Thread: non blocca l’interfaccia grafica

var worker = new Worker(“async.js")

worker.postMessage(“message")

worker.onmessage = function(event) {… event.data …}

worker.terminate()

Web Workers

Page 102: Applicazioni HTML5 Superveloci - Salvatore Romeo

Web Workers

2.2

4

Page 103: Applicazioni HTML5 Superveloci - Salvatore Romeo

Web Workers

2.2

4

Page 104: Applicazioni HTML5 Superveloci - Salvatore Romeo

App HTML5 superveloci

Velocità di download

Velocità di comunicazione client/server

Velocità hardware

Considerazioni generali

Oltre il codice

Page 105: Applicazioni HTML5 Superveloci - Salvatore Romeo

Perché progettare app HTML5 superveloci?

Oltre il codice

Page 106: Applicazioni HTML5 Superveloci - Salvatore Romeo

Oltre il codice

Page 107: Applicazioni HTML5 Superveloci - Salvatore Romeo

Oltre il codice

Page 108: Applicazioni HTML5 Superveloci - Salvatore Romeo

Oltre il codice

Page 109: Applicazioni HTML5 Superveloci - Salvatore Romeo

Oltre il codice

Page 110: Applicazioni HTML5 Superveloci - Salvatore Romeo

Oltre il codice

Page 111: Applicazioni HTML5 Superveloci - Salvatore Romeo

User Experience

Oltre il codice

Page 112: Applicazioni HTML5 Superveloci - Salvatore Romeo

User Experience

Chi userà l’app

Dove userà l’app

Come userà l’app

Quando userà l’app

Perché userà l’app

Oltre il codice

Page 113: Applicazioni HTML5 Superveloci - Salvatore Romeo

Es: loading piuttosto che niente

Oltre il codice

Page 114: Applicazioni HTML5 Superveloci - Salvatore Romeo

Es: loading piuttosto che niente

Oltre il codice

Page 115: Applicazioni HTML5 Superveloci - Salvatore Romeo

App HTML5 superveloci

Velocità di download

Velocità di comunicazione client/server

Velocità hardware

Considerazioni generali

Oltre il codice

Page 116: Applicazioni HTML5 Superveloci - Salvatore Romeo

Chrome Web Tools

Chrome Page Speed https://developers.google.com/speed/pagespeed/

Chrome FPS Counter about:flag

Adobe Edge Inspect

Javascript

Misurare la velocità

Page 118: Applicazioni HTML5 Superveloci - Salvatore Romeo

Grazie

linkedin.com/in/salvatoreromeo

twitter.com/romeosalv

stiamo cercando dev e designer