97
High Performance Web Sites 14 rules for faster‐loading pages Steve Souders souders@yahoo‐inc.com Tenni Theurer tenni@yahoo‐inc.com

14 Tips For Faster Web Apps

Embed Size (px)

Citation preview

Page 1: 14 Tips For Faster Web Apps

High Performance Web Sites

14 rules for faster‐loading pages

Steve Souders souders@yahoo‐inc.com

Tenni Theurer tenni@yahoo‐inc.com

Page 2: 14 Tips For Faster Web Apps

Introduction

Page 3: 14 Tips For Faster Web Apps

Exceptional Performance

started in 2004

quantify and improve the performance of all Yahoo! products worldwide

center of expertise

build tools, analyze data

gather, research, and evangelize best practices

Page 4: 14 Tips For Faster Web Apps

Scope

performance breaks into two categories – response time – efficiency

current focus is response time

of web products

Page 5: 14 Tips For Faster Web Apps

Rough Cuts: now

Hardcopy: Summer 2007

http://www.oreilly.com/catalog/9780596514211/

Page 6: 14 Tips For Faster Web Apps

The Importance of Front‐End Performance

Page 7: 14 Tips For Faster Web Apps

percentage of time spent on the front‐end

Back‐end vs. Front‐end

95% 97% youtube.com

88% 95% yahoo.com

88% 80% wikipedia.org

86% 96% myspace.com

95% 97% msn.com

64% 86% google.com

92% 98% ebay.com

92% 81% cnn.com

86% 94% aol.com

86% 82% amazon.com

Full Cache Empty Cache

Page 8: 14 Tips For Faster Web Apps

The Performance Golden Rule

80‐90% of the end‐user response time is spent on the front‐end. Start there.

• Greater potential for improvement

• Simpler

• Proven to work

Page 9: 14 Tips For Faster Web Apps

Schedule

Performance Research

break

14 Rules

break

Case Studies

Live Analysis

Page 10: 14 Tips For Faster Web Apps

Performance Research

Page 11: 14 Tips For Faster Web Apps

perceived response time

what is the end user’s experience?

slow crawl boring snail

stagnant unexceptional yawn unresponsive

impatient delay moderate blah subdue drag apathetic

prolong slack load sluggish sleepy late unexciting

reduced lag complex heavy unmemorable obscure

why wait

performance speed enjoyable urgent instant

accelerate perception snap achievement better improve

action pleasant pace quick promote swift cool

maximum drive prompt advance fast hurry rush

satisfying feel exceptional

brisk rapid exciting

Page 12: 14 Tips For Faster Web Apps

User Perception

Usability and perception are important for performance.

The user’s perception is more relevant than actual unload‐to‐onload response time.

Definition of "user onload" is undefined or varies from one web page to the next.

Page 13: 14 Tips For Faster Web Apps

http://yuiblog.com/blog/2006/11/28/performance‐research‐part‐1/

Page 14: 14 Tips For Faster Web Apps

80/20 Performance Rule

Vilfredo Pareto:

80% of consequences come from 20% of causes

Focus on the 20% that affects 80% of the end‐user response time.

Start at the front‐end.

Page 15: 14 Tips For Faster Web Apps

1 1 user requests

www.yahoo.com

2 2 user requests

other web pages

3 3 user re‐requests www.yahoo.com

Empty vs. Full Cache

Page 16: 14 Tips For Faster Web Apps

1 1 user requests

www.yahoo.com

2 2 user requests

other web pages

3 3 user re‐requests www.yahoo.com

Empty vs. Full Cache

0 0.5 1 1.5 2 2.5 3

image stylesheet

script script

dns lookup image image image image image

dns lookup script image image image image image image image image script image image image image image image image image script

dns lookup image image html

dns lookup

with an empty cache

Page 17: 14 Tips For Faster Web Apps

1 1 user requests

www.yahoo.com

2 2 user requests

other web pages

3 3 user re‐requests www.yahoo.com

Empty vs. Full Cache

Page 18: 14 Tips For Faster Web Apps

Empty vs. Full Cache

0 0.5 1 1.5 2 2.5 3

image image html

Expires header

1 1 user requests

www.yahoo.com

2 2 user requests

other web pages

3 3 user re‐requests www.yahoo.com

with a full cache

Page 19: 14 Tips For Faster Web Apps

Empty vs. Full Cache

empty cache

2.4 seconds

full cache

0.9 seconds

83% fewer bytes

90% fewer HTTP requests

Page 20: 14 Tips For Faster Web Apps

How much does this benefit our users?

It depends on how many users have components in cache.

• What percentage of users view a page with an empty cache * ? * “Empty cache” means the browser has to request the components instead of pulling them from the browser disk cache.

• What percentage of page views are done with an empty cache * ?

Page 21: 14 Tips For Faster Web Apps

http://yuiblog.com/blog/2007/01/04/performance‐research‐part‐2/

Page 22: 14 Tips For Faster Web Apps

Add a new image to your page <img src="image/blank.gif" height="1" width="1"/>

with the following response headers:

Expires: Thu, 15 Apr 2004 20:00:00 GMT Last­Modified: Wed, 28 Sep 2006 23:49:57 GMT

1 px

Browser Cache Experiment

Page 23: 14 Tips For Faster Web Apps

Browser Cache Experiment

Requests from the browser will have one of these response status codes:

200 – The browser does not have the image in its cache.

304 – The browser has the image in its cache, but needs to verify the last modified date.

Page 24: 14 Tips For Faster Web Apps

Browser Cache Experiment

total # of 200 responses # of 200 + # of 304

responses

What percentage of page views are done with an empty cache?

# unique users with at least one 200 response

total # unique users

What percentage of users view with an empty cache?

1 px

Page 25: 14 Tips For Faster Web Apps

0.0%

10.0%

20.0%

30.0%

40.0%

50.0%

60.0%

70.0%

80.0%

90.0%

100.0%

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

day of experiment

percentage

unique users with empty cache

page views with empty cache

Surprising Results

page views with empty cache

40‐60% ~20%

users with empty cache

Page 26: 14 Tips For Faster Web Apps

Experiment Takeaways

Keep in mind the empty cache user experience. It might be more prevalent than you think!

Use different techniques to optimize full versus empty cache experience.

Page 27: 14 Tips For Faster Web Apps

http://yuiblog.com/blog/2007/03/01/performance‐research‐part‐3

Page 28: 14 Tips For Faster Web Apps

1 1 user requests

www.yahoo.com

HTTP Quick Review

HTTP response header sent by the web server: HTTP/1.1 200 OK Content­Type: text/html; charset=utf­8 Set­Cookie: C=abcdefghijklmnopqrstuvwxyz; domain=.yahoo.com

Page 29: 14 Tips For Faster Web Apps

1 1 user requests

www.yahoo.com

HTTP Quick Review

2 2 user requests

finance.yahoo.com

HTTP request header sent by the browser: GET / HTTP/1.1 Host: finance.yahoo.com User­Agent: Mozilla/4.0 (compatible; MSIE 6.0; … Cookie: C=abcdefghijklmnopqrstuvwxyz;

Page 30: 14 Tips For Faster Web Apps

1 1 user requests

www.yahoo.com

3 3 user requests

autos.yahoo.com

HTTP Quick Review

HTTP request header sent by the browser: GET / HTTP/1.1 Host: autos.yahoo.com User­Agent: Mozilla/4.0 (compatible; MSIE 6.0; … Cookie: C=abcdefghijklmnopqrstuvwxyz;

Page 31: 14 Tips For Faster Web Apps

1 1 user requests

www.yahoo.com

4 4 user requests

mail.yahoo.com

HTTP Quick Review

HTTP request header sent by the browser: GET / HTTP/1.1 Host: mail.yahoo.com User­Agent: Mozilla/4.0 (compatible; MSIE 6.0; … Cookie: C=abcdefghijklmnopqrstuvwxyz;

Page 32: 14 Tips For Faster Web Apps

1 1 user requests

www.yahoo.com

5 5 user requests

tech.yahoo.com

HTTP Quick Review

HTTP request header sent by the browser: GET / HTTP/1.1 Host: tech.yahoo.com User­Agent: Mozilla/4.0 (compatible; MSIE 6.0; … Cookie: C=abcdefghijklmnopqrstuvwxyz;

Page 33: 14 Tips For Faster Web Apps

Impact of Cookies on Response Time

80 ms delay dialup users

+78 ms 156 ms 3000 bytes

+63 ms 141 ms 2500 bytes

+47 ms 125 ms 2000 bytes

+31 ms 109 ms 1500 bytes

+16 ms 94 ms 1000 bytes

+1 ms 79 ms 500 bytes

0 ms 78 ms 0 bytes

Delta Time Cookie Size

keep sizes low

Page 34: 14 Tips For Faster Web Apps

.yahoo.com cookie sizes

28.86%

51.80%

17.79%

1.55%

0%

100%

percen

tage

of p

age view

s over 1501 bytes 1001­1500 bytes 501­1000 bytes 1­500 bytes

Page 35: 14 Tips For Faster Web Apps

Analysis of Cookie Sizes across the Web

500 bytes MySpace

331 bytes eBay

268 bytes MSN

218 bytes YouTube

184 bytes CNN

122 bytes Yahoo

72 bytes Google

60 bytes Amazon

Total Cookie Size

Page 36: 14 Tips For Faster Web Apps

Experiment Takeaways

eliminate unnecessary cookies

keep cookie sizes low

set cookies at appropriate domain level

set Expires date appropriately – earlier date or none removes cookie sooner

Page 37: 14 Tips For Faster Web Apps

http://yuiblog.com/blog/2007/04/11/performance‐research‐part‐4/

Page 38: 14 Tips For Faster Web Apps

Parallel Downloads

Two components in parallel per hostname

GIF GIF

GIF

GIF

GIF

GIF

HTTP/1.1

Page 39: 14 Tips For Faster Web Apps

Parallel Downloads

0 0.2 0.4 0.6 0.8 1 1.2 1.4

component component component component component component component component component component

html

0 0.2 0.4 0.6 0.8 1 1.2 1.4

component component component component component component component component component component

html

Two in parallel

Four in parallel

Eight in parallel 0 0.2 0.4 0.6 0.8 1 1.2 1.4

component component component component component component component component component component

html

Page 40: 14 Tips For Faster Web Apps

Maximizing Parallel Downloads

response time (seconds)

aliases

Page 41: 14 Tips For Faster Web Apps

Maximizing Parallel Downloads

response time (seconds)

aliases

0.00

0.20

0.40

0.60

0.80

1.00

1.20

1.40

1 2 4 5 10

36 x 36 px (0.9 Kb) 116 x 61 px (3.4 Kb)

Page 42: 14 Tips For Faster Web Apps

Maximizing Parallel Downloads

response time (seconds)

aliases

0.00

0.20

0.40

0.60

0.80

1.00

1.20

1.40

1 2 4 5 10

average 36 x 36 px (0.9 Kb) 116 x 61 px (3.4 Kb)

Page 43: 14 Tips For Faster Web Apps

Maximizing Parallel Downloads

response time (seconds)

rule of thumb: use at least two but no more than four aliases

0.00

0.20

0.40

0.60

0.80

1.00

1.20

1.40

1 2 4 5 10

average 36 x 36 px (0.9 Kb) 116 x 61 px (3.4 Kb)

Page 44: 14 Tips For Faster Web Apps

Experiment Takeaways

consider the effects of CPU thrashing

DNS lookup times vary across ISPs and geographic locations

domain names may not be cached

Page 45: 14 Tips For Faster Web Apps

Summary

What the 80/20 Rule Tells Us about Reducing HTTP Requests http://yuiblog.com/blog/2007/04/11/performance‐research‐part‐4/

Browser Cache Usage – Exposed! http://yuiblog.com/blog/2007/01/04/performance‐research‐part‐2/

When the Cookie Crumbles http://yuiblog.com/blog/2007/01/04/performance‐research‐part‐2/

Maximizing Parallel Downloads in the Carpool Lane http://yuiblog.com/blog/2007/04/11/performance‐research‐part‐4/

Page 46: 14 Tips For Faster Web Apps

14 Rules

Page 47: 14 Tips For Faster Web Apps

14 Rules 1. Make fewer HTTP requests 2. Use a CDN 3. Add an Expires header 4. Gzip components 5. Put CSS at the top 6. Move JS to 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. Turn off ETags 14. Make AJAX cacheable and small

Page 48: 14 Tips For Faster Web Apps

Rule 1: Make fewer HTTP requests

image maps

CSS sprites

inline images

combined scripts, combined stylesheets

Page 49: 14 Tips For Faster Web Apps

Image maps

server‐side <a href="navbar.cgi"><img ismap src="imagemap.gif"></a>

→ http://.../navbar.cgi?127,13

client‐side – preferred <img usemap="#map1" border=0 src="/images/imagemap.gif">

<map name="map1">

<area shape="rect" coords="0,0,31,31" href="home.html" title="Home">

</map>

drawbacks: – must be contiguous – defining area coordinates – tedious, errors

http://www.w3.org/TR/html401/struct/objects.html#h‐13.6

Page 50: 14 Tips For Faster Web Apps

CSS Sprites – Preferred

size of combined image is less not supported in Opera 6 http://alistapart.com/articles/sprites

<span style=" background­image: url('sprites.gif'); background­position: ­260px ­90px;">

</span>

Page 51: 14 Tips For Faster Web Apps

Inline Images

data: URL scheme data:[<mediatype>][;base64],<data>

<IMG ALT=”Red Star” SRC="data:image/gif;base64,R0lGODlhDAAMALMLAPN8ffBiYvWWlvrKy/FvcPewsO9VVf

ajo+w6O/zl5estLv/8/AAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAMAAwAAAQzcElZyryT EHyTUgknHd9xGV+qKsYirKkwDYiKDBiatt2H1KBLQRFIJAIKywRgmhwAIlEEADs=">

not supported in IE

avoid increasing size of HTML pages: put inline images in cached stylesheets

http://tools.ietf.org/html/rfc2397

Page 52: 14 Tips For Faster Web Apps

Combined Scripts, Combined Stylesheets

3 7 youtube.com

1.5 6.5 Average

1 4 yahoo.com

1 3 wikipedia.org

2 2 myspace.com

1 9 msn.com

1 1 froogle.google.com

2 7 ebay.com

2 11 cnn.com

1 18 aol.com

1 3 amazon.com

Stylesheets Scripts

Page 53: 14 Tips For Faster Web Apps

Combined Scripts, Combined Stylesheets

combining six scripts into one eliminates five HTTP requests

challenges: – develop as separate modules – number of possible combinations vs. loading

more than needed – maximize browser cache

one solution: – dynamically combine and cache

Page 54: 14 Tips For Faster Web Apps

Rule 2: Use a CDN

distribute your static content before distributing your dynamic content

youtube.com

Akamai yahoo.com

wikipedia.org

Akamai, Limelight myspace.com

SAVVIS msn.com

google.com

Akamai, Mirror Image ebay.com

cnn.com

Akamai aol.com

Akamai amazon.com

Page 55: 14 Tips For Faster Web Apps

Rule 3: Add an Expires header not just for images

26 days 0% 0/7 0/3 0/32 youtube.com

100%

75%

0%

80%

4%

55%

1%

48%

0%

%

n/a 4/4 1/1 23/23 yahoo.com

1 day 2/3 1/1 6/8 wikipedia.org

1 day 0/2 0/2 0/18 myspace.com

34 days 3/9 1/1 32/35 msn.com

454 days 0/1 0/1 1/23 froogle.google.com

140 days 0/7 0/2 16/20 ebay.com

227 days 2/11 0/2 0/138 cnn.com

217 days 6/18 1/1 23/43 aol.com

114 days 0/3 0/1 0/62 amazon.com

Median Age Scripts Stylesheets Images

Page 56: 14 Tips For Faster Web Apps

Rule 4: Gzip components

you can affect users' download times

90%+ of browsers support compression

Page 57: 14 Tips For Faster Web Apps

Gzip compresses more

Gzip supported in more browsers

Gzip vs. Deflate

Deflate Gzip

67% 4.7K 73% 3.7K 14.1K Stylesheet

52% 0.5K 56% 0.4K 1.0K Stylesheet

58% 16.6K 64% 14.5K 39.7K Script

66% 1.1K 67% 1.1K 3.3K Script

Savings Size Savings Size Size

Page 58: 14 Tips For Faster Web Apps

Gzip: not just for HTML

some some x youtube.com

x x x yahoo.com x x x wikipedia.org

x x x myspace.com

deflate deflate x msn.com x x x froogle.google.com

x ebay.com

cnn.com

some some x aol.com x amazon.com

Stylesheets Scripts HTML

gzip scripts, stylesheets, XML, JSON (not images, PDF)

Page 59: 14 Tips For Faster Web Apps

Gzip Configuration

Apache 2.x: mod_deflate AddOutputFilterByType DEFLATE text/html text/css application/x­javascript

HTTP request Accept­Encoding: gzip, deflate

HTTP response Content­Encoding: gzip Vary: Accept­Encoding

needed for proxies

Page 60: 14 Tips For Faster Web Apps

Gzip Edge Cases

<1% of browsers have problems with gzip – IE 5.5:

http://support.microsoft.com/default.aspx?scid=kb;en‐us;Q313712

– IE 6.0: http://support.microsoft.com/default.aspx?scid=kb;en‐us;Q31249

– Netscape 3.x, 4.x http://www.schroepl.net/projekte/mod_gzip/browser.htm

consider adding Cache­Control: Private

remove ETags (Rule 13)

hard to diagnose; problem getting smaller

Page 61: 14 Tips For Faster Web Apps

Rule 5: Put CSS at the top

stylesheets block rendering in IE http://stevesouders.com/examples/css‐bottom.php

solution: put stylesheets in HEAD (per spec)

avoids Flash of Unstyled Content

use LINK (not @import)

Page 62: 14 Tips For Faster Web Apps

Slowest is Fastest

Page 63: 14 Tips For Faster Web Apps

Rule 6: Move scripts to the bottom

scripts block parallel downloads across all hostnames

scripts block rendering of everything below them in the page

IE and FF http://stevesouders.com/examples/js‐middle.php

Page 64: 14 Tips For Faster Web Apps

Rule 6: Move scripts to the bottom

script defer attribute is not a solution – blocks rendering and downloads in FF – slight blocking in IE

solution: move them as low in the page as possible

Page 65: 14 Tips For Faster Web Apps

Rule 7: Avoid CSS expressions

used to set CSS properties dynamically in IE width: expression(

document.body.clientWidth < 600 ? “600px” : “auto” );

problem: expressions execute many times – mouse move, key press, resize, scroll, etc.

http://stevesouders.com/examples/expression‐counter.php

Page 66: 14 Tips For Faster Web Apps

One‐Time Expressions

expression overwrites itself <style> P

background­color: expression(altBgcolor(this)); </style>

<script> function altBgcolor(elem)

elem.style.backgroundColor = (new Date()).getHours()%2 ? "#F08A00" : "#B8D4FF";

</script>

Page 67: 14 Tips For Faster Web Apps

Event Handlers

tie behavior to (fewer) specific events window.onresize = setMinWidth; function setMinWidth()

var aElements = document.getElementsByTagName("p");

for ( var i = 0; i < aElements.length; i++ ) aElements[i].runtimeStyle.width = (

document.body.clientWidth<600 ? "600px" : "auto" );

Page 68: 14 Tips For Faster Web Apps

Rule 8: Make JS and CSS external

inline: HTML document is bigger

external: more HTTP requests, but cached

variables – page views per user (per session) – empty vs. full cache stats – component re‐use

external is typically better – home pages may be an exception

Page 69: 14 Tips For Faster Web Apps

Post‐Onload Download

inline in front page

download external files after onload window.onload = downloadComponents; function downloadComponents()

var elem = document.createElement("script"); elem.src = "http://.../file1.js"; document.body.appendChild(elem); ...

speeds up secondary pages

Page 70: 14 Tips For Faster Web Apps

Dynamic Inlining

start with post‐onload download

set cookie after components downloaded

server‐side: – if cookie, use external – else, do inline with post‐onload download

cookie expiration date is key speeds up all pages

Page 71: 14 Tips For Faster Web Apps

Rule 9: Reduce DNS lookups

typically 20‐120 ms

block parallel downloads

OS and browser both have DNS caches

Page 72: 14 Tips For Faster Web Apps

TTL (Time To Live)

5 minutes www.youtube.com

1 minute www.yahoo.com

1 hour www.wikipedia.org

1 hour www.myspace.com

5 minutes www.msn.com

5 minutes www.google.com

1 hour www.ebay.com

10 minutes www.cnn.com

1 minute www.aol.com

1 minute www.amazon.com

TTL – how long record can be cached

browser settings override TTL

Page 73: 14 Tips For Faster Web Apps

Browser DNS Cache

IE – DnsCacheTimeout: 30 minutes – KeepAliveTimeout: 1 minute – ServerInfoTimeout: 2 minutes

Firefox – network.dnsCacheExpiration: 1 minute – network.dnsCacheEntries: 20 – network.http.keep‐alive.timeout: 5 minutes – Fasterfox: 1 hour, 512 entries, 30 seconds

Page 74: 14 Tips For Faster Web Apps

Reducing DNS Lookups

fewer hostnames – 2‐4

keep‐alive

Page 75: 14 Tips For Faster Web Apps

Rule 10: Minify JavaScript

no

yes

no

no

yes

yes

yes

no

no

no

Minify External?

no www.youtube.com

yes www.yahoo.com

no www.wikipedia.org

no www.myspace.com

yes www.msn.com

yes froogle.google.com

no www.ebay.com

no www.cnn.com

no www.aol.com

no www.amazon.com

Minify Inline?

minify inline scripts, too

Page 76: 14 Tips For Faster Web Apps

Minify vs. Obfuscate Dojo Savings JSMin Savings Original

21K (25%) 17K (21%) 85K Average

10K (29%) 8K (22%) 34K www.youtube.com

16K (38%) 14K (34%) 42K www.wikipedia.org

24K (28%) 23K (27%) 88K www.myspace.com

24K (25%) 19K (20%) 98K www.cnn.com

4K (10%) 4K (10%) 44K www.aol.com

48K (24%) 31K (15%) 204K www.amazon.com

minify – it's safer

http://crockford.com/javascript/jsmin

http://dojotoolkit.org/docs/shrinksafe

Page 77: 14 Tips For Faster Web Apps

Rule 11: Avoid redirects

3xx status codes – mostly 301 and 302 HTTP/1.1 301 Moved Permanently Location: http://stevesouders.com/newuri

add Expires headers to cache redirects

worst form of blocking

http://www.w3.org/Protocols/rfc2616/rfc2616‐sec10.html

Page 78: 14 Tips For Faster Web Apps

Redirects

no

yes – secondary page

yes – secondary page

yes – secondary page

yes – initial page

no

yes – secondary page

yes – initial page

yes – secondary page

no

Redirects

www.youtube.com

www.yahoo.com

www.wikipedia.org

www.myspace.com

www.msn.com

froogle.google.com

www.ebay.com

www.cnn.com

www.aol.com

www.amazon.com

Page 79: 14 Tips For Faster Web Apps

Avoid Redirects

missing trailing slash – http://astrology.yahoo.com/astrology – use Alias or DirectorySlash

mod_rewrite

CNAMEs

log referer – track internal links

outbound links – harder – beacons – beware of race condition – XHR – bail at readyState 2

Page 80: 14 Tips For Faster Web Apps

Rule 12: Remove duplicate scripts

hurts performance – extra HTTP requests (IE only) – extra executions

atypical? – 2 of 10 top sites contain duplicate scripts

team size, # of scripts

Page 81: 14 Tips For Faster Web Apps

Script Insertion Functions

<?php function insertScript($jsfile)

if ( alreadyInserted($jsfile) ) return;

pushInserted($jsfile);

if ( hasDependencies($jsfile) ) $dependencies = getDependencies($jsfile); for ( $i = 0; $i < count($dependencies); $i++ )

insertScript($dependencies[$i]);

echo '<script type="text/javascript" src="' . getVersion($jsfile) . '"></script>";

?>

Page 82: 14 Tips For Faster Web Apps

Rule 13: Turn off ETags

unique identifier returned in response ETag: "c8897e­aee­4165acf0" Last­Modified: Thu, 07 Oct 2004 20:54:08 GMT

used in conditional GET requests If­None­Match: "c8897e­aee­4165acf0" If­Modified­Since: Thu, 07 Oct 2004 20:54:08 GMT

if ETag doesn't match, can't send 304

Page 83: 14 Tips For Faster Web Apps

The Problem with ETags

ETag for a single entity is always different across servers

ETag format – Apache: inode­size­timestamp – IIS: Filetimestamp:ChangeNumber

Sites with >1 server return too few 304s – (n‐1)/n

Remove them – Apache: FileETag none – IIS: http://support.microsoft.com/kb/922703/

Page 84: 14 Tips For Faster Web Apps

Rule 14: Make AJAX cacheable and small

XHR, JSON, iframe, dynamic scripts can still be cached, minified, and gzipped

a personalized response should still be cacheable by that person

Page 85: 14 Tips For Faster Web Apps

AJAX Example: Yahoo! Mail Beta

address book XML request → GET /yab/[...]&r=0.5289571053069156 HTTP/1.1

Host: us.xxx.mail.yahoo.com ← HTTP/1.1 200 OK

Date: Thu, 12 Apr 2007 19:39:09 GMT Cache­Control: private,max­age=0 Last­Modified: Sat, 31 Mar 2007 01:17:17 GMT Content­Type: text/xml; charset=utf­8 Content­Encoding: gzip

address book changes infrequently – cache it; add last‐modified‐time in URL

Page 86: 14 Tips For Faster Web Apps

Live Analysis

Page 87: 14 Tips For Faster Web Apps

IBM Page Detailer

packet sniffer

Windows only

IE, FF, any .exe c:\windows\wd_WS2s.ini Executable=(NETSCAPE.EXE),(NETSCP6.EXE),(firefox.exe)

free trial, $300 license

http://alphaworks.ibm.com/tech/pagedetailer

Page 88: 14 Tips For Faster Web Apps

http://alphaworks.ibm.com/tech/pagedetailer

Page 89: 14 Tips For Faster Web Apps

Fasterfox

measures load time of pages

alters config settings for faster loading

Firefox extension

free

http://fasterfox.mozdev.org/

Page 90: 14 Tips For Faster Web Apps

LiveHTTPHeaders

view HTTP headers

Firefox extension

free

http://livehttpheaders.mozdev.org/

Page 91: 14 Tips For Faster Web Apps

Firebug

web development evolved

inspect and edit HTML

tweak and visualize CSS

debug and profile JavaScript

monitor network activity (caveat)

Firefox extension

free

http://getfirebug.com/

Page 92: 14 Tips For Faster Web Apps

http://getfirebug.com/

Page 93: 14 Tips For Faster Web Apps

YSlow

performance lint tool

grades web pages for each rule

Firefox extension

Yahoo! internal tool

Page 94: 14 Tips For Faster Web Apps
Page 95: 14 Tips For Faster Web Apps

Conclusion

Page 96: 14 Tips For Faster Web Apps

Takeaways

focus on the front‐end

harvest the low‐hanging fruit

you do control user response times

LOFNO – be an advocate for your users

Page 97: 14 Tips For Faster Web Apps

Links

book: http://www.oreilly.com/catalog/9780596514211/ examples: http://stevesouders.com/examples/ image maps: http://www.w3.org/TR/html401/struct/objects.html#h‐13.6 CSS sprites: http://alistapart.com/articles/sprites inline images: http://tools.ietf.org/html/rfc2397 jsmin: http://crockford.com/javascript/jsmin dojo compressor: http://dojotoolkit.org/docs/shrinksafe HTTP status codes: http://www.w3.org/Protocols/rfc2616/rfc2616‐sec10.html IBM Page Detailer: http://alphaworks.ibm.com/tech/pagedetailer Fasterfox: http://fasterfox.mozdev.org/ LiveHTTPHeaders: http://livehttpheaders.mozdev.org/ Firebug: http://getfirebug.com/ YUIBlog: http://yuiblog.com/blog/2006/11/28/performance‐research‐part‐1/

http://yuiblog.com/blog/2007/01/04/performance‐research‐part‐2/ http://yuiblog.com/blog/2007/03/01/performance‐research‐part‐3/ http://yuiblog.com/blog/2007/04/11/performance‐research‐part‐4/

YDN: http://developer.yahoo.net/blog/archives/2007/03/high_performanc.html http://developer.yahoo.net/blog/archives/2007/04/rule_1_make_few.html