frontend caching, phptek 2011, chicago

139
Frontend Caching Helgi Þormar Þorbjörnsson PHP Tek, Chicago, 26th May 2011 Thursday, 26 May 2011

Upload: helgi-bormar-borbjoernsson

Post on 20-Jan-2015

1.597 views

Category:

Technology


0 download

DESCRIPTION

You’ve used all the server-side caching tricks in the book: memcache, APC, database cache and so on to squeeze every millisecond out, and now your site is as fast as it will ever get. Well guess again! These technologies are caching and creating the HTML which, if they done correctly, is only 10 – 20% of the user response time, so there is a lot of room for improvement. Learn how to optimize your JavaScript, CSS, Images, Cookies and a whole slew of other things that make frontend caching a magical place.

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