Download - Frontend Caching, PHPTek 2011, Chicago

Transcript
Page 1: Frontend Caching, PHPTek 2011, Chicago

Frontend Caching

Helgi Þormar ÞorbjörnssonPHP Tek, Chicago, 26th May 2011

Thursday, 26 May 2011

Page 2: Frontend Caching, PHPTek 2011, Chicago

Who am I?

Thursday, 26 May 2011

Page 3: Frontend Caching, PHPTek 2011, Chicago

Who am I?

VP of Engineering at Orchestra.io

Thursday, 26 May 2011

Page 4: Frontend Caching, PHPTek 2011, Chicago

Who am I?

VP of Engineering at Orchestra.io

Developer at PEAR

Thursday, 26 May 2011

Page 5: Frontend Caching, PHPTek 2011, Chicago

Who am I?

VP of Engineering at Orchestra.io

Developer at PEAR

From Iceland

Thursday, 26 May 2011

Page 6: Frontend Caching, PHPTek 2011, Chicago

Who am I?

VP of Engineering at Orchestra.io

Developer at PEAR

From Iceland

@h on Twitter

Thursday, 26 May 2011

Page 7: Frontend Caching, PHPTek 2011, Chicago

Pareto Principle

20% 80%

Thursday, 26 May 2011

Page 8: Frontend Caching, PHPTek 2011, Chicago

20% 80%

80 / 20 Rule

20% of the population receives 80% of the income

Thursday, 26 May 2011

Page 9: Frontend Caching, PHPTek 2011, Chicago

20% 80%

80 / 20 Rule

20% of causes produce 80% of the effects

Thursday, 26 May 2011

Page 10: Frontend Caching, PHPTek 2011, Chicago

80% of response time is

spent downloading resources

Thursday, 26 May 2011

Page 11: Frontend Caching, PHPTek 2011, Chicago

4 Rules of Web Performance

Thursday, 26 May 2011

Page 12: Frontend Caching, PHPTek 2011, Chicago

Weight

Time

Processing

Perception

Thursday, 26 May 2011

Page 13: Frontend Caching, PHPTek 2011, Chicago

Perception

Thursday, 26 May 2011

Page 14: Frontend Caching, PHPTek 2011, Chicago

Make people think your site is fast

Thursday, 26 May 2011

Page 15: Frontend Caching, PHPTek 2011, Chicago

When people can interact with the site

Thursday, 26 May 2011

Page 16: Frontend Caching, PHPTek 2011, Chicago

Thursday, 26 May 2011

Page 17: Frontend Caching, PHPTek 2011, Chicago

“It all depends on how we look at things, and not how

they are in themselves.”

- Carl G. Jung

Thursday, 26 May 2011

Page 18: Frontend Caching, PHPTek 2011, Chicago

50% of users arrive

on an empty cache

Perception

Thursday, 26 May 2011

Page 19: Frontend Caching, PHPTek 2011, Chicago

Perception

Empty Cache Full Cache28.0K 1 HTML Document

1.9K 1 Style Sheet File

59.5K 4 Javascript Files

78.7K 24 Images

168.1K Total Size

30 HTTP Requests

2.4s Response Time

28.0K 1 HTML Document

0.1K 2 Images

28.1K Total Size

3 HTTP Requests

0.9s Response Time

Thursday, 26 May 2011

Page 20: Frontend Caching, PHPTek 2011, Chicago

Weight

Thursday, 26 May 2011

Page 21: Frontend Caching, PHPTek 2011, Chicago

HTTP Requests

Thursday, 26 May 2011

Page 22: Frontend Caching, PHPTek 2011, Chicago

HTTP Requests

Less is more

Thursday, 26 May 2011

Page 23: Frontend Caching, PHPTek 2011, Chicago

HTTP Requests

Less is more

Fewer HTTP Requests

Thursday, 26 May 2011

Page 24: Frontend Caching, PHPTek 2011, Chicago

HTTP Requests

Less is more

Fewer HTTP Requests

Easy to improve on

Thursday, 26 May 2011

Page 25: Frontend Caching, PHPTek 2011, Chicago

Cookies

Thursday, 26 May 2011

Page 26: Frontend Caching, PHPTek 2011, Chicago

Cookies

Sent with static content

Thursday, 26 May 2011

Page 27: Frontend Caching, PHPTek 2011, Chicago

Cookies

Sent with static content

Slow upstream speed

Thursday, 26 May 2011

Page 28: Frontend Caching, PHPTek 2011, Chicago

Cookies

Sent with static content

Slow upstream speed

Big cookies

Thursday, 26 May 2011

Page 29: Frontend Caching, PHPTek 2011, Chicago

Experiment Time!

Cookie Size Response Time (Delta)

0 bytes 78 ms ( 0 ms)

500 bytes 79 ms ( +1 ms)

1000 bytes 94 ms (+16 ms)

1500 bytes 109 ms (+31 ms)

2000 bytes 125 ms (+47 ms)

2500 bytes 141 ms (+63 ms)

3000 bytes 156 ms (+78 ms)

Thursday, 26 May 2011

Page 30: Frontend Caching, PHPTek 2011, Chicago

Experiment Time!

Cookie Size Response Time (Delta)

0 bytes 78 ms ( 0 ms)

500 bytes 79 ms ( +1 ms)

1000 bytes 94 ms (+16 ms)

1500 bytes 109 ms (+31 ms)

2000 bytes 125 ms (+47 ms)

2500 bytes 141 ms (+63 ms)

3000 bytes 156 ms (+78 ms)

Thursday, 26 May 2011

Page 31: Frontend Caching, PHPTek 2011, Chicago

Experiment Time!

Cookie Size Response Time (Delta)

0 bytes 78 ms ( 0 ms)

500 bytes 79 ms ( +1 ms)

1000 bytes 94 ms (+16 ms)

1500 bytes 109 ms (+31 ms)

2000 bytes 125 ms (+47 ms)

2500 bytes 141 ms (+63 ms)

3000 bytes 156 ms (+78 ms)

Thursday, 26 May 2011

Page 32: Frontend Caching, PHPTek 2011, Chicago

Cookies

Thursday, 26 May 2011

Page 33: Frontend Caching, PHPTek 2011, Chicago

Cookies

Thursday, 26 May 2011

Page 34: Frontend Caching, PHPTek 2011, Chicago

Cookies

Remove unnecessary cookies

Thursday, 26 May 2011

Page 35: Frontend Caching, PHPTek 2011, Chicago

Cookies

Remove unnecessary cookies

Appropriate domain level

Thursday, 26 May 2011

Page 36: Frontend Caching, PHPTek 2011, Chicago

Cookies

Remove unnecessary cookies

Appropriate domain level

Keep size low

Thursday, 26 May 2011

Page 37: Frontend Caching, PHPTek 2011, Chicago

Cookies

Remove unnecessary cookies

Appropriate domain level

Keep size low

Set Expires

Thursday, 26 May 2011

Page 38: Frontend Caching, PHPTek 2011, Chicago

Parallel Downloads

Thursday, 26 May 2011

Page 39: Frontend Caching, PHPTek 2011, Chicago

Parallel Downloads

Be aware of max connection limits

Thursday, 26 May 2011

Page 40: Frontend Caching, PHPTek 2011, Chicago

Parallel Downloads

Borrowed from BrowserScope.org

Thursday, 26 May 2011

Page 41: Frontend Caching, PHPTek 2011, Chicago

Parallel Downloads

Borrowed from BrowserScope.org

Thursday, 26 May 2011

Page 42: Frontend Caching, PHPTek 2011, Chicago

Parallel Downloads

One domain = 2 Parallel connections

Thursday, 26 May 2011

Page 43: Frontend Caching, PHPTek 2011, Chicago

Parallel Downloads

HTML

Image

Image

Image

Image

Image

Image

Image

Image

0.4 0.8 1.2 1.6 2 2.4 Secs

One domain = 2 Parallel connections

Thursday, 26 May 2011

Page 44: Frontend Caching, PHPTek 2011, Chicago

Parallel Downloads

HTML

Image

Image

Image

Image

Image

Image

Image

Image

0.4 0.8 1.2 1.6 2 2.4 Secs

Two domains = 4 Parallel connections

Thursday, 26 May 2011

Page 45: Frontend Caching, PHPTek 2011, Chicago

Parallel Downloads

Too many hostnames can cause complications

Thursday, 26 May 2011

Page 46: Frontend Caching, PHPTek 2011, Chicago

Parallel Downloads

Too many hostnames can cause complications

2 – 4 sub domains is a good average

Thursday, 26 May 2011

Page 47: Frontend Caching, PHPTek 2011, Chicago

Combine Files

Combining 6 scripts into 1 eliminates 5 requests

Thursday, 26 May 2011

Page 48: Frontend Caching, PHPTek 2011, Chicago

Combine Files

Combining 6 scripts into 1 eliminates 5 requests

Challenges: develop as separate modules combinations vs. loading more than needed

Thursday, 26 May 2011

Page 49: Frontend Caching, PHPTek 2011, Chicago

Javascript

Doesn’t comply with parallel download rules

Thursday, 26 May 2011

Page 50: Frontend Caching, PHPTek 2011, Chicago

Javascript

HTML

JS

Image

Image

Image

Image

Image

Image

Image

0.4 0.8 1.2 1.6 2 2.4 Secs

Doesn’t comply with parallel download rules

Thursday, 26 May 2011

Page 51: Frontend Caching, PHPTek 2011, Chicago

Javascript

script defer attribute is not a solution

Thursday, 26 May 2011

Page 52: Frontend Caching, PHPTek 2011, Chicago

Javascript

script defer attribute is not a solution

Solution - move them as low in the page as possible

Thursday, 26 May 2011

Page 53: Frontend Caching, PHPTek 2011, Chicago

Processing

Thursday, 26 May 2011

Page 54: Frontend Caching, PHPTek 2011, Chicago

Processing

Thursday, 26 May 2011

Page 55: Frontend Caching, PHPTek 2011, Chicago

Processing

Fake the delivery

Thursday, 26 May 2011

Page 56: Frontend Caching, PHPTek 2011, Chicago

Processing

Fake the delivery

Lazy Loading

Thursday, 26 May 2011

Page 57: Frontend Caching, PHPTek 2011, Chicago

Processing

Fake the delivery

Lazy Loading

Above the fold Loading

Thursday, 26 May 2011

Page 58: Frontend Caching, PHPTek 2011, Chicago

Processing

Fake the delivery

Lazy Loading

Above the fold Loading

Delay Javascript Loading

Thursday, 26 May 2011

Page 59: Frontend Caching, PHPTek 2011, Chicago

Processing

Thursday, 26 May 2011

Page 60: Frontend Caching, PHPTek 2011, Chicago

Processing

Bonus - async attribute

Thursday, 26 May 2011

Page 61: Frontend Caching, PHPTek 2011, Chicago

Processing

Bonus - async attribute

http://www.appelsiini.net/projects/lazyload

Thursday, 26 May 2011

Page 62: Frontend Caching, PHPTek 2011, Chicago

JS Minification

Thursday, 26 May 2011

Page 63: Frontend Caching, PHPTek 2011, Chicago

JS Minification

Crushes the file

Strips out all cruft

Voodoo Magic!

Thursday, 26 May 2011

Page 64: Frontend Caching, PHPTek 2011, Chicago

JS Minfication

UglifyJS

Google Closure

YUI Compressor

Thursday, 26 May 2011

Page 65: Frontend Caching, PHPTek 2011, Chicago

JS Minfication

UglifyJS

Google Closure

YUI Compressor

http://bit.ly/compression-rates

Thursday, 26 May 2011

Page 66: Frontend Caching, PHPTek 2011, Chicago

CSS Minification

YUI Compressor

minifycss.com

OOCSS

Thursday, 26 May 2011

Page 67: Frontend Caching, PHPTek 2011, Chicago

GZipGZip can be used on

Thursday, 26 May 2011

Page 68: Frontend Caching, PHPTek 2011, Chicago

GZip

JS

GZip can be used on

Thursday, 26 May 2011

Page 69: Frontend Caching, PHPTek 2011, Chicago

GZip

JS

CSS

GZip can be used on

Thursday, 26 May 2011

Page 70: Frontend Caching, PHPTek 2011, Chicago

GZip

JS

CSS

XML

GZip can be used on

Thursday, 26 May 2011

Page 71: Frontend Caching, PHPTek 2011, Chicago

GZip

JS

CSS

XML

JSON

GZip can be used on

Thursday, 26 May 2011

Page 72: Frontend Caching, PHPTek 2011, Chicago

GZip

GZip should not be used on

Thursday, 26 May 2011

Page 73: Frontend Caching, PHPTek 2011, Chicago

GZip

Images

GZip should not be used on

Thursday, 26 May 2011

Page 74: Frontend Caching, PHPTek 2011, Chicago

GZip

Images

Document formats

GZip should not be used on

Thursday, 26 May 2011

Page 75: Frontend Caching, PHPTek 2011, Chicago

GZip

Images

Document formats

Already compressed

GZip should not be used on

Thursday, 26 May 2011

Page 76: Frontend Caching, PHPTek 2011, Chicago

404

robots.txt

favicon

Thursday, 26 May 2011

Page 77: Frontend Caching, PHPTek 2011, Chicago

Images

Thursday, 26 May 2011

Page 78: Frontend Caching, PHPTek 2011, Chicago

Images

favicon

Thursday, 26 May 2011

Page 79: Frontend Caching, PHPTek 2011, Chicago

Images

favicon

CSS Sprites

Thursday, 26 May 2011

Page 80: Frontend Caching, PHPTek 2011, Chicago

Images

favicon

CSS Sprites

inline base64

Thursday, 26 May 2011

Page 81: Frontend Caching, PHPTek 2011, Chicago

Images

favicon

CSS Sprites

inline base64

Thursday, 26 May 2011

Page 82: Frontend Caching, PHPTek 2011, Chicago

Images

Thursday, 26 May 2011

Page 83: Frontend Caching, PHPTek 2011, Chicago

Images

Badly optimised

Thursday, 26 May 2011

Page 84: Frontend Caching, PHPTek 2011, Chicago

Images

Badly optimised

Thumbnails

Thursday, 26 May 2011

Page 85: Frontend Caching, PHPTek 2011, Chicago

Images

Badly optimised

Thumbnails

PNGs compressed up to 50%

Thursday, 26 May 2011

Page 86: Frontend Caching, PHPTek 2011, Chicago

PNG Optimise

OptiPNG

pngwolf

pngcrush

jpegtran

Thursday, 26 May 2011

Page 87: Frontend Caching, PHPTek 2011, Chicago

Time

Thursday, 26 May 2011

Page 88: Frontend Caching, PHPTek 2011, Chicago

SSL

Thursday, 26 May 2011

Page 89: Frontend Caching, PHPTek 2011, Chicago

SSL

Extra roundtrips

Thursday, 26 May 2011

Page 90: Frontend Caching, PHPTek 2011, Chicago

SSL

Extra roundtrips

More resources for servers

Thursday, 26 May 2011

Page 91: Frontend Caching, PHPTek 2011, Chicago

SSL

Extra roundtrips

More resources for servers

Worth it, tho!

Thursday, 26 May 2011

Page 92: Frontend Caching, PHPTek 2011, Chicago

Tread the users’ path

Thursday, 26 May 2011

Page 93: Frontend Caching, PHPTek 2011, Chicago

Tread the users’ path

Test on slower connections

Thursday, 26 May 2011

Page 94: Frontend Caching, PHPTek 2011, Chicago

Tread the users’ path

Test on slower connections

Slow proxies

Thursday, 26 May 2011

Page 95: Frontend Caching, PHPTek 2011, Chicago

Tread the users’ path

Thursday, 26 May 2011

Page 96: Frontend Caching, PHPTek 2011, Chicago

Tread the users’ path

Tables / Phones

Thursday, 26 May 2011

Page 97: Frontend Caching, PHPTek 2011, Chicago

Tread the users’ path

Tables / Phones

Airline connections

Thursday, 26 May 2011

Page 98: Frontend Caching, PHPTek 2011, Chicago

Tread the users’ path

Tables / Phones

Airline connections

Public places

Thursday, 26 May 2011

Page 99: Frontend Caching, PHPTek 2011, Chicago

CDN

Thursday, 26 May 2011

Page 100: Frontend Caching, PHPTek 2011, Chicago

CDN

Single domain

Thursday, 26 May 2011

Page 101: Frontend Caching, PHPTek 2011, Chicago

CDN

Single domain

Smart routing

Thursday, 26 May 2011

Page 102: Frontend Caching, PHPTek 2011, Chicago

CDN

Single domain

Smart routing

Data is closer to end user

Thursday, 26 May 2011

Page 103: Frontend Caching, PHPTek 2011, Chicago

CDN

Thursday, 26 May 2011

Page 104: Frontend Caching, PHPTek 2011, Chicago

CDN

Thursday, 26 May 2011

Page 105: Frontend Caching, PHPTek 2011, Chicago

CDN on a Budget

Thursday, 26 May 2011

Page 106: Frontend Caching, PHPTek 2011, Chicago

CDN on a Budget

S3

Thursday, 26 May 2011

Page 107: Frontend Caching, PHPTek 2011, Chicago

Query vs. Filenamerevisions

Thursday, 26 May 2011

Page 108: Frontend Caching, PHPTek 2011, Chicago

Query vs. Filenamerevisions

Cache far in future

Thursday, 26 May 2011

Page 109: Frontend Caching, PHPTek 2011, Chicago

Query vs. Filenamerevisions

Cache far in future

Revisioning forces downloads

Thursday, 26 May 2011

Page 110: Frontend Caching, PHPTek 2011, Chicago

Query vs. Filenamerevisions

Cache far in future

Revisioning forces downloads

Thursday, 26 May 2011

Page 111: Frontend Caching, PHPTek 2011, Chicago

Query revisions

Thursday, 26 May 2011

Page 112: Frontend Caching, PHPTek 2011, Chicago

Query revisions

Easy and convenient

Thursday, 26 May 2011

Page 113: Frontend Caching, PHPTek 2011, Chicago

Query revisions

Easy and convenient

Usually not recommended

Thursday, 26 May 2011

Page 114: Frontend Caching, PHPTek 2011, Chicago

Query revisions

Easy and convenient

Usually not recommended

Bad proxies are a problem

Thursday, 26 May 2011

Page 115: Frontend Caching, PHPTek 2011, Chicago

Filename revisions

Thursday, 26 May 2011

Page 116: Frontend Caching, PHPTek 2011, Chicago

Filename revisions

Requires more work

Thursday, 26 May 2011

Page 117: Frontend Caching, PHPTek 2011, Chicago

Filename revisions

Requires more work

Recommended

Thursday, 26 May 2011

Page 118: Frontend Caching, PHPTek 2011, Chicago

Filename revisions

Requires more work

Recommended

During build, using md5 hash

Thursday, 26 May 2011

Page 119: Frontend Caching, PHPTek 2011, Chicago

Compromise

Thursday, 26 May 2011

Page 120: Frontend Caching, PHPTek 2011, Chicago

CompromiseCreate a version function

Thursday, 26 May 2011

Page 121: Frontend Caching, PHPTek 2011, Chicago

CompromiseCreate a version function

Put on all resources

Thursday, 26 May 2011

Page 122: Frontend Caching, PHPTek 2011, Chicago

CompromiseCreate a version function

Put on all resources

mod_rewrite magic

Thursday, 26 May 2011

Page 123: Frontend Caching, PHPTek 2011, Chicago

Compromise

http://bit.ly/query_rev_comp

Create a version function

Put on all resources

mod_rewrite magic

Thursday, 26 May 2011

Page 124: Frontend Caching, PHPTek 2011, Chicago

Browser Tools

Thursday, 26 May 2011

Page 125: Frontend Caching, PHPTek 2011, Chicago

Browser Tools

Firebug

Thursday, 26 May 2011

Page 126: Frontend Caching, PHPTek 2011, Chicago

Browser Tools

Firebug

YSlow

Thursday, 26 May 2011

Page 127: Frontend Caching, PHPTek 2011, Chicago

Browser Tools

Firebug

YSlow

PageSpeed

Thursday, 26 May 2011

Page 128: Frontend Caching, PHPTek 2011, Chicago

Browser Tools

Firebug

YSlow

PageSpeed

Chrome Inspector

Thursday, 26 May 2011

Page 129: Frontend Caching, PHPTek 2011, Chicago

Other Tools

Thursday, 26 May 2011

Page 130: Frontend Caching, PHPTek 2011, Chicago

Other Tools

HTTPWatch.com

Thursday, 26 May 2011

Page 131: Frontend Caching, PHPTek 2011, Chicago

Other Tools

HTTPWatch.com

WebPageTest.org

Thursday, 26 May 2011

Page 132: Frontend Caching, PHPTek 2011, Chicago

Other Tools

HTTPWatch.com

WebPageTest.org

HTTPArchive.org

Thursday, 26 May 2011

Page 133: Frontend Caching, PHPTek 2011, Chicago

Other Tools

HTTPWatch.com

WebPageTest.org

HTTPArchive.org

chartbeat.com

Thursday, 26 May 2011

Page 134: Frontend Caching, PHPTek 2011, Chicago

Other Tools

Thursday, 26 May 2011

Page 135: Frontend Caching, PHPTek 2011, Chicago

Other Tools

WonderProxy.com

Thursday, 26 May 2011

Page 136: Frontend Caching, PHPTek 2011, Chicago

Other Tools

WonderProxy.com

BrowserScope.com

Thursday, 26 May 2011

Page 137: Frontend Caching, PHPTek 2011, Chicago

Other Tools

WonderProxy.com

BrowserScope.com

html5boilerplate.com

Thursday, 26 May 2011

Page 138: Frontend Caching, PHPTek 2011, Chicago

“Knowledge rests not upon truth alone, but upon error also”

- Carl G. Jung

Thursday, 26 May 2011