72
Please Don’t Touch the Slow Parts V2 [email protected] http://www.ideato.it/ [email protected] http://federico.galassi.net / Saturday, May 15, 2010

Please Don't Touch the Slow Parts V2

Embed Size (px)

DESCRIPTION

Extended version of talk "Please don't touch the slow parts". I gave this at PhpDay on May 15th 2010. It's about improving web applications speed. Based on Steve Souders work. Also http://www.ideato.it/ http://federico.galassi.net/ http://www.stevesouders.com/ http://www.bettersoftware.it/ http://www.phpday.it/ Follow me on Twitter! https://twitter.com/federicogalassi

Citation preview

Page 2: Please Don't Touch the Slow Parts V2

Saturday, May 15, 2010

Page 3: Please Don't Touch the Slow Parts V2

faster

Saturday, May 15, 2010

Page 4: Please Don't Touch the Slow Parts V2

faster WEB

Saturday, May 15, 2010

Page 5: Please Don't Touch the Slow Parts V2

Faster == Better?

Saturday, May 15, 2010

Page 6: Please Don't Touch the Slow Parts V2

We have to wait

Saturday, May 15, 2010

Page 7: Please Don't Touch the Slow Parts V2

... All the time

Saturday, May 15, 2010

Page 8: Please Don't Touch the Slow Parts V2

“Savings in timefeels like simplicity”

Saturday, May 15, 2010

Page 9: Please Don't Touch the Slow Parts V2

“Time is the only commodity that matters”

Saturday, May 15, 2010

Page 10: Please Don't Touch the Slow Parts V2

Psychology of webperformance

http://www.websiteoptimization.com/speed/tweak/psychology-web-performance/

5-8SECONDS

Saturday, May 15, 2010

Page 11: Please Don't Touch the Slow Parts V2

Faster web, more clicks

http://www.stevesouders.com/blog/2009/07/27/wikia-fast-pages-retain-users/

Saturday, May 15, 2010

Page 12: Please Don't Touch the Slow Parts V2

Faster web, better SEO

http://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html

Saturday, May 15, 2010

Page 13: Please Don't Touch the Slow Parts V2

Faster web is hot

Saturday, May 15, 2010

Page 14: Please Don't Touch the Slow Parts V2

Say web, Say browser

Saturday, May 15, 2010

Page 15: Please Don't Touch the Slow Parts V2

How browsers work

Saturday, May 15, 2010

Page 16: Please Don't Touch the Slow Parts V2

User clicks on a link

Saturday, May 15, 2010

Page 17: Please Don't Touch the Slow Parts V2

Browser resolves domain name

www.google.com

72.14.234.104

DNS

UDP

domain

Saturday, May 15, 2010

Page 18: Please Don't Touch the Slow Parts V2

Browser connects to web server

TCP/IP

72.14.234.104

WEB

domain connect

Saturday, May 15, 2010

Page 19: Please Don't Touch the Slow Parts V2

Browser sends arequest for a page

HTTP

GET /language_tools?hl=enHost: www.google.com

domain connect send

WEB

Saturday, May 15, 2010

Page 20: Please Don't Touch the Slow Parts V2

Browser receives a response with the page

HTTP

200 OK

domain connect send receive

WEB

Saturday, May 15, 2010

Page 21: Please Don't Touch the Slow Parts V2

Browser renders the new page

domain connect send receive render

Saturday, May 15, 2010

Page 22: Please Don't Touch the Slow Parts V2

Rendering is complexparse + paint

render

Saturday, May 15, 2010

Page 23: Please Don't Touch the Slow Parts V2

Rendering really complexparse + paint + resources

render

css

img

css

img

javascript

javascript

flash

Saturday, May 15, 2010

Page 24: Please Don't Touch the Slow Parts V2

Each resource is another web request

render

Saturday, May 15, 2010

Page 25: Please Don't Touch the Slow Parts V2

Requests areprocessed in parallel

render

Saturday, May 15, 2010

Page 26: Please Don't Touch the Slow Parts V2

Rendering is execution

mouse moved mouse pressed mouse released key pressed key released

render

INPUT

OS

EVENT QUEUE

Saturday, May 15, 2010

Page 27: Please Don't Touch the Slow Parts V2

Execution in one threadmouse moved

mouse pressed mouse released key pressed key released

render

EVENT QUEUE

Javascript Execution

WebBrowsing

Saturday, May 15, 2010

Page 28: Please Don't Touch the Slow Parts V2

Once upon a time...

Few resources

Static pages

Less javascript

Saturday, May 15, 2010

Page 29: Please Don't Touch the Slow Parts V2

Most time on serverdomain connect send receive render

Saturday, May 15, 2010

Page 30: Please Don't Touch the Slow Parts V2

Solution is faster serversidedomain connect send receive render

Saturday, May 15, 2010

Page 31: Please Don't Touch the Slow Parts V2

Ajax revolution

Saturday, May 15, 2010

Page 32: Please Don't Touch the Slow Parts V2

Ajax revolutionperformance

Saturday, May 15, 2010

Page 33: Please Don't Touch the Slow Parts V2

Page updating

One time(classic) WEB

Saturday, May 15, 2010

Page 34: Please Don't Touch the Slow Parts V2

On demand(ajax) WEB

... later ...

Page updating

Saturday, May 15, 2010

Page 35: Please Don't Touch the Slow Parts V2

Continuous(polling) WEB

Page updating

Saturday, May 15, 2010

Page 36: Please Don't Touch the Slow Parts V2

Push(comet) WEB

Page updating

Saturday, May 15, 2010

Page 37: Please Don't Touch the Slow Parts V2

Most time on browserdomain connect send receive render

Saturday, May 15, 2010

Page 38: Please Don't Touch the Slow Parts V2

Golden rule of faster web

80% of the end user response time is spent

on the front-end

Saturday, May 15, 2010

Page 39: Please Don't Touch the Slow Parts V2

Golden rule of faster web

Start there.

Saturday, May 15, 2010

Page 40: Please Don't Touch the Slow Parts V2

Why webslow parts?

Saturday, May 15, 2010

Page 41: Please Don't Touch the Slow Parts V2

Easy to understand

Saturday, May 15, 2010

Page 42: Please Don't Touch the Slow Parts V2

Each part has its rules

Saturday, May 15, 2010

Page 43: Please Don't Touch the Slow Parts V2

Which parts are slow?

Saturday, May 15, 2010

Page 44: Please Don't Touch the Slow Parts V2

Network is slow

Saturday, May 15, 2010

Page 45: Please Don't Touch the Slow Parts V2

Less stuffFewer requests

Concatenate js/cssCss spritesInline images

Too many resources

Saturday, May 15, 2010

Page 46: Please Don't Touch the Slow Parts V2

Less stuffCache requests

Expires headerRevving FilesExternal js/cssRemove etags

Resourcesre-downloaded

Saturday, May 15, 2010

Page 47: Please Don't Touch the Slow Parts V2

Smaller stuffCompress responses

Content-EncodingGzipDeflate

Resources are too big

Saturday, May 15, 2010

Page 48: Please Don't Touch the Slow Parts V2

Smaller stuffMinify responses

js, css, htmlremove formattingremove commentsoptimize imagesuse tools

Resources are too big

Saturday, May 15, 2010

Page 49: Please Don't Touch the Slow Parts V2

Closer stuffUse a CDN

Resources are too far

reduce latency

Saturday, May 15, 2010

Page 50: Please Don't Touch the Slow Parts V2

Browser is slow

Saturday, May 15, 2010

Page 51: Please Don't Touch the Slow Parts V2

Scripts block loading

javascript

css

javascript

img

flash

document.writelocation.hrefscripts order

html

img

Saturday, May 15, 2010

Page 52: Please Don't Touch the Slow Parts V2

css

Put scripts at bottom

javascript

javascript

img

img

flash

html

Saturday, May 15, 2010

Page 53: Please Don't Touch the Slow Parts V2

css

Unloaded stylesblock page rendering

html

img

img

flash

Saturday, May 15, 2010

Page 54: Please Don't Touch the Slow Parts V2

css

html

img

img

flash

Put styles at top

Saturday, May 15, 2010

Page 55: Please Don't Touch the Slow Parts V2

Indeed ... scripts block everything

Saturday, May 15, 2010

Page 56: Please Don't Touch the Slow Parts V2

Load scripts asynchronously

var scriptTag = document.createElement("script")scriptTag.src = "http://www.example.org/js/lib.js"

document.getElementsByTagName("head")[0] .appendChild(scriptTag)

Saturday, May 15, 2010

Page 57: Please Don't Touch the Slow Parts V2

Yield with timers

// doSomethingLong() is too slow, split it

doSomething()

setTimeout(function() { doSomethingElse()}, 50)

Saturday, May 15, 2010

Page 58: Please Don't Touch the Slow Parts V2

Scripts and stylesside effects

dom is alivelayout is alive

Saturday, May 15, 2010

Page 59: Please Don't Touch the Slow Parts V2

Rules pitfalls

Saturday, May 15, 2010

Page 61: Please Don't Touch the Slow Parts V2

Expect the unexpected

empty cacheno compression

Saturday, May 15, 2010

Page 62: Please Don't Touch the Slow Parts V2

Know your users

Track user capabilities

Saturday, May 15, 2010

Page 63: Please Don't Touch the Slow Parts V2

Conflicting rules

DNS vs Parallel

Inline vs External

Concatenated vs Reuse

Saturday, May 15, 2010

Page 64: Please Don't Touch the Slow Parts V2

All that glittersis not gold

Saturday, May 15, 2010

Page 65: Please Don't Touch the Slow Parts V2

Everything is atradeoff

Saturday, May 15, 2010

Page 66: Please Don't Touch the Slow Parts V2

performance bringscomplexity

Saturday, May 15, 2010

Page 67: Please Don't Touch the Slow Parts V2

know the rules but...

Saturday, May 15, 2010

Page 68: Please Don't Touch the Slow Parts V2

leave complexityto computers

Saturday, May 15, 2010

Page 69: Please Don't Touch the Slow Parts V2

use librariesduring development

Saturday, May 15, 2010

Page 70: Please Don't Touch the Slow Parts V2

Use toolsat build time

Saturday, May 15, 2010

Page 71: Please Don't Touch the Slow Parts V2

http://abetterbrowser.org/Saturday, May 15, 2010

Page 72: Please Don't Touch the Slow Parts V2

Questions?

Saturday, May 15, 2010