66
fast by default http://stevesouders.com/docs/amazon-20091030.pptx Disclaimer: This content does not necessarily reflect the opinions of my employer.

Fast by Default

Embed Size (px)

DESCRIPTION

This is Steve Souders's talk at Amazon which I couldn't read in it's original pptx format (http://stevesouders.com/docs/amazon-20091030.pptx) since Keynote sucks at importing. It seems to render well here.

Citation preview

Page 1: Fast by Default

fast

by

default

http://stevesouders.com/docs/amazon-20091030.pptx

Disclaimer: This content does not necessarily reflect the opinions of my employer.

Page 2: Fast by Default

GMail Mobile: http://googlecode.blogspot.com/2009/09/gmail-for-mobile-html5-series-reducing.html

SproutCore: http://blog.sproutcore.com/post/225219087/faster-loading-through-eval

Google, Bing biz metrics: http://en.oreilly.com/velocity2009/public/schedule/detail/8523

Yahoo! biz metrics: http://www.slideshare.net/stoyan/yslow-20-presentation

Shopzilla biz metrics: http://en.oreilly.com/velocity2009/public/schedule/detail/7709

Netflix outbound traffic: http://en.oreilly.com/velocity2008/public/schedule/detail/3632

Google, Bing charts: http://www.watchingwebsites.com/archives/proof-that-speeding-up-websites-improves-online-business

Aptimize WAX: http://blogs.msdn.com/sharepoint/archive/2009/09/28/how-we-did-it-speeding-up-sharepoint-microsoft-com.aspx

Strangeloop Networks: http://www.watchingwebsites.com/archives/proof-that-speeding-up-websites-improves-online-business

SproutCore: http://blog.sproutcore.com/post/196959232/how-sproutcore-makes-your-app-run-faster

HTTP Archive Format: http://www.stevesouders.com/blog/2009/10/19/http-archive-specification-firebug-and-httpwatch/

@font-face: http://www.stevesouders.com/blog/2009/10/13/font-face-and-performance/

Page 3: Fast by Default

Happy Halloween!

Page 4: Fast by Default
Page 5: Fast by Default

17% 83%

iGoogle, primed cache

the importance of frontend performance

9% 91%

iGoogle, empty cache

Page 6: Fast by Default

14 RULES

1. MAKE FEWER HTTP REQUESTS

2. USE A CDN

3. ADD AN EXPIRES HEADER

4. GZIP COMPONENTS

5. PUT STYLESHEETS AT THE TOP

6. PUT SCRIPTS AT THE BOTTOM

7. AVOID CSS EXPRESSIONS

8. MAKE JS AND CSS EXTERNAL

9. REDUCE DNS LOOKUPS

10.MINIFY JS

11.AVOID REDIRECTS

12.REMOVE DUPLICATE SCRIPTS

13.CONFIGURE ETAGS

14.MAKE AJAX CACHEABLE

Page 7: Fast by Default

Even Faster Web SitesSplitting the initial payload

Loading scripts without blocking

Coupling asynchronous scripts

Positioning inline scripts

Sharding dominant domains

Flushing the document early

Using iframes sparingly

Simplifying CSS Selectors

Understanding Ajax performance..........Doug Crockford

Creating responsive web apps............Ben Galbraith, Dion Almaer

Writing efficient JavaScript.............Nicholas Zakas

Scaling with Comet.....................Dylan Schiemann

Going beyond gzipping...............Tony Gentilcore

Optimizing images...................Stoyan Stefanov, Nicole Sullivan

Page 8: Fast by Default

AOLeBayFacebookMySpaceWikipediaYahoo!

Why focus on JavaScript?

YouTube

Page 9: Fast by Default

scripts block

<script src="A.js"> blocks parallel downloads and rendering

7 secs: IE 8, FF 3.5, Chr 3, Saf 4

9 secs: IE 6-7, FF 3.0, Chr 1, Op 9-10, Saf 3

Page 10: Fast by Default

JavaScript

Functions Executed before onload

www.aol.com 115K 30%

www.ebay.com 183K 44%

www.facebook.com 1088K 9%

www.google.com/search

15K 45%

search.live.com/results

17K 24%

www.msn.com 131K 31%

www.myspace.com 297K 18%

en.wikipedia.org/wiki 114K 32%

www.yahoo.com 321K 13%

www.youtube.com 240K 18%

26% avg252K avg

initial payload and execution

Page 11: Fast by Default

splitting the initial payload

split your JavaScript between what's needed to render the page and

everything else

defer "everything else"

split manually (Page Speed), automatically (Microsoft Doloto)

load scripts without blocking – how?

Page 12: Fast by Default

MSNScripts and other resources downloaded in parallel! How? Secret sauce?!

var p=

g.getElementsByTagName("HEAD")[0];

var c=g.createElement("script");

c.type="text/javascript";

c.onreadystatechange=n;

c.onerror=c.onload=k;

c.src=e;

p.appendChild(c)

MSN.com: parallel scripts

Page 13: Fast by Default

Loading Scripts Without Blocking

XHR Eval

XHR Injection

Script in Iframe

Script DOM Element

Script Defer

document.write Script Tag

Page 14: Fast by Default

XHR Eval

script & page must be same domain

massage script?

var xhrObj = getXHRObject();

xhrObj.onreadystatechange =

function() {

if ( xhrObj.readyState != 4 ) return;

eval(xhrObj.responseText);

};

xhrObj.open('GET', 'A.js', true);

xhrObj.send('');

Page 15: Fast by Default

Script DOM Elementvar se = document.createElement('script');

se.src = 'http://anydomain.com/A.js';

document.getElementsByTagName('head')

[0].appendChild(se);

script & page domains can differ

no need to massage JavaScript

may not preserve execution order

Page 16: Fast by Default

GMail Mobile<script type="text/javascript">

/*

var ...

*/

</script>

get script DOM element's text

remove comments

eval() when invoked

inline or iframe

awesome for prefetching JS that might (not) be needed

Page 17: Fast by Default

SproutCorevar module1 = "...";

var module2 = "...";

eval() modules as needed

2nd

fastest downloading

2nd

fastest loading symbols

best alternative

Page 18: Fast by Default

stylesheets load in parallel with other resources...

...unless followed by an inline script

put inline JS above stylesheets or below other resources

use Link, not @import

bad: stylesheet followed by inline script

Page 19: Fast by Default

eBayMSNMySpaceWikipedia

mispositioned inline scripts

Page 20: Fast by Default

onload

last resource

deferred ads!

Page 21: Fast by Default

background-image: url(http://…/navPackedSprites_v12._V222883957_.png);

<img src="http://.../navPackedSprites_v12._V222883957_.png" style="display:none"/>

</style>

<script type="text/javascript">

var amznJQ = {

_a: [], _s: [], _d: [], _l: [], _o: [], _c: [], _cs: [],

addLogical: function() {

onload

last resource

Page 22: Fast by Default

onload

last resource

var swmsMainContentImage_67691 =

'<img src="http://.../wl10_marquee_wk4-kindlelove._V228858619_.png">';

<!--[if (gte IE 5.5)&(lt IE 7)]>

<script type="text/javascript">

if (document.body.filters) {

swmsMainContentImage_67691 = '<img style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(en

Page 23: Fast by Default

onload

last resource

three script blocks between

Page 24: Fast by Default

onload

last resource

two script blocks between

Page 25: Fast by Default

onload

last resource

loaded twice

Page 26: Fast by Default
Page 27: Fast by Default
Page 28: Fast by Default

Google

+ 0.4 sec

searches 0.6%

Page 29: Fast by Default

Yahoo!

+ 0.4 sec

traffic 5-9%

Page 30: Fast by Default

Bing

+2 sec

revenue 4.3%

Page 31: Fast by Default

Shopzilla

-5 sec

revenue

12%

hw 50%

Page 32: Fast by Default

Netflix

outbound bandwidth

43%

Page 33: Fast by Default
Page 34: Fast by Default

fast performance =

better user experience

more traffic

more revenue

reduced costs

Page 35: Fast by Default

so...

why don't more people do it?

Page 36: Fast by Default

it's

too

hard!

Page 37: Fast by Default
Page 38: Fast by Default

"the hard is what makes it great""if it wasn't hard everyone would

do it"

Page 39: Fast by Default

this year's theme:

Fast by Default

Page 40: Fast by Default

Aptimize WAX

concatenate scripts

concatenate stylesheets

sprites, data: URIs

far future Expires

minify JS and CSS

automatically in real time

Page 41: Fast by Default

WAX on:

http://sharepoint.microsoft.com

# requests empty: 96 35

# requests primed: 50 9

scripts 7, stylesheets 12, images 25

pages faster: 46-64% empty, 15-53% primed

Page 42: Fast by Default

Strangeloop Networks

"typical ecommerce site"

pages per visit: 11 16

time on site: 24 30 mins

conversions: 16%

order value: 5.5%

Page 43: Fast by Default

Rails

far future Expires

concatenate scripts

domain sharding

configure ETags

in pipeline: async scripts, spriting, minification,

flushing

Page 44: Fast by Default

SproutCore

concatenate scripts

concatenate stylesheets

versioning (future Expires)

stylesheets at the top

scripts at the bottom

minify JS & CSS

remove dupe scripts

Page 45: Fast by Default

Why do some sites feel slow

?

Page 46: Fast by Default

AOL

Page 47: Fast by Default

Twitter

Page 48: Fast by Default

Best Buy

Page 49: Fast by Default

CNN

Page 50: Fast by Default

(lack of)

Progressive Rendering

Page 52: Fast by Default

WebPagetest.org

VA, UK, NZ

IE7, IE8

Dial, DSL, FIOS

empty, empty & primed

quad core

Pat Meenan (AOL)

Page 54: Fast by Default

Shopping

Page 55: Fast by Default

Sports

Page 56: Fast by Default

Progressive Enhancement

deliver HTML

defer JS

avoid DOM

decorate later

Page 57: Fast by Default

Progressive Enhancement

Progressive Rendering

Page 58: Fast by Default

news

Page 59: Fast by Default

finds BG images

groups into sprites

generates sprite

recomputes BG pos

injects into page

http://spriteme.org/

Page 60: Fast by Default

Browserscope

Page 61: Fast by Default

HTTP Archive Format

(HAR)

Page 62: Fast by Default

Velocity OnLine Conference

Dec 8, 9am-12:30pm PT

Hooman Beheshti (StrangeLoop)

Charles Jolley (SproutCore)

Matt Cutts (Google)

Artur Bergman (Wikia)

Damien Katz (CouchDB)

Page 63: Fast by Default

focus on the frontend

run YSlow

and Page Speed!

progressive enhancement progressive rendering

takeaways

Page 64: Fast by Default

SPEED is the next competitive advantage

use it

...before someone else does

Page 65: Fast by Default

Steve Souders

[email protected]

http://stevesouders.com/docs/amazon-20091030.pptx

Page 66: Fast by Default

GMail Mobile: http://googlecode.blogspot.com/2009/09/gmail-for-mobile-html5-series-reducing.html

SproutCore: http://blog.sproutcore.com/post/225219087/faster-loading-through-eval

Google, Bing biz metrics: http://en.oreilly.com/velocity2009/public/schedule/detail/8523

Yahoo! biz metrics: http://www.slideshare.net/stoyan/yslow-20-presentation

Shopzilla biz metrics: http://en.oreilly.com/velocity2009/public/schedule/detail/7709

Netflix outbound traffic: http://en.oreilly.com/velocity2008/public/schedule/detail/3632

Google, Bing charts: http://www.watchingwebsites.com/archives/proof-that-speeding-up-websites-improves-online-business

Aptimize WAX: http://blogs.msdn.com/sharepoint/archive/2009/09/28/how-we-did-it-speeding-up-sharepoint-microsoft-com.aspx

Strangeloop Networks: http://www.watchingwebsites.com/archives/proof-that-speeding-up-websites-improves-online-business

SproutCore: http://blog.sproutcore.com/post/196959232/how-sproutcore-makes-your-app-run-faster

HTTP Archive Format: http://www.stevesouders.com/blog/2009/10/19/http-archive-specification-firebug-and-httpwatch/

@font-face: http://www.stevesouders.com/blog/2009/10/13/font-face-and-performance/