48
http://www.flickr.com/photos/nzbuu/4093456029 Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns? @andydavies #VelocityConf, London

Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Embed Size (px)

Citation preview

Page 1: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

http://www.flickr.com/photos/nzbuu/4093456029

Are Today’s Good Practices…Tomorrow’s Performance Anti-Patterns?

@andydavies#VelocityConf, London

Page 2: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

What if …

http://www.flickr.com/photos/willypayne/3116395089

… dataURIs are an anti-pattern?

Page 3: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

The ‘humble’ dataURI

url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF/wAAAAAAQaMSAwAAABJJREFUeNpiYBgFo2AwAIAAAwACigABtnCV2AAAAABJRU5ErkJggg==)

=

Page 4: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

dataURIs for CSS images

Makes a blocking resource larger by including non-blocking resources

• Browser can’t start rendering page until CSS has downloaded *

• Images don’t block

Do they have the same caching lifetime?

* Some browsers defer download of CSS when media query doesn’t match

Page 5: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Test the theory

http://www.flickr.com/photos/marc-flores/8367323660

Page 6: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

1. Take 50 icons2. Create 50 stylesheets, each with one more dataURI than

previous3. Create matching HTML file for each stylesheet4. Test them all!

Page 7: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Larger CSS download = longer time to RenderStart

500

625

750

875

1000

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49

Ren

derS

tart

- T

TFB

(m

s)

Number of Sprites

Page 8: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

This got me thinking!

http://www.flickr.com/photos/irishwildcat/3020466221

Page 9: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

We have our rules…http://www.flickr.com/photos/sowrey/2441134911

Page 10: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

and we love recipes…http://www.flickr.com/photos/mrsmagic/2247364228

Page 11: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

But, what happens when things change?

Page 12: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Browsers already use the network differently

Page 13: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?
Page 14: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?
Page 15: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

New network protocols are coming here

http://www.flickr.com/photos/jonlachance/3427660741

Page 16: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

HTTP 1.1

SPDY

Differences in TCP Connection Use

Page 17: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

New Standards - opportunities and challenges

Page 18: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

How much do we rely on inline JavaScript?

http://www.flickr.com/photos/jfraissi/6352877711

Page 19: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

73% of visitors support async attribute

<script async src="myscript.js"><script>

http://caniuse.com/script-async

Page 20: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Yet, this is how we typically asynchronously load scripts

<script type="text/javascript"> function() { var js = document.createElement('script'); js.async = true; js.src = 'myscript.js'; var e = document.getElementsByTagName('script')[0]; e.parentNode.insertBefore(js, first); })();</script>

Page 21: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

XSS

Page 22: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Content-Security-Policy

“Content Security Policy, a mechanism web applications can use to mitigate a broad class of content injection vulnerabilities, such as cross-site scripting (XSS)”

http://www.w3.org/TR/CSP/

Page 23: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Example

Content-Security-Policy: script-src http://www.site.com

Can re-enable inline scripts, but increases XSS risk

Content-Security-Policy script-src 'self'

Only allow scripts to be executed if they come from a designated host, disables inline scripts by default.

Page 24: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

What other performance enhancements do we rely on inline JS for?

Guardian split page into

- Content - Enhancements - Leftovers

Others rely on scroll handlers for lazyloading

Page 25: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Resource Priorities - adds lazyload and postpone attributes

Page 26: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

So what about the network?

http://www.flickr.com/photos/uwwresnet/5881727219

Page 27: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Tested some scenarios, measured the outcomes

http://www.flickr.com/photos/chandramarsono/4324373384

Page 28: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Test Environment

- EC2 - Medium Instance - Dublin

- Apache 2.2- GZIP- Keep-Alive- mod_pagespeed- mod_spdy

- WepPageTest, Dulles / Chrome / Cable

Page 29: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

http://www.html5xcss3.com/2012/05/html5-template-interio.html

Off the shelf website template

Page 30: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Minimal Optimisations - HTTP 1.1 vs SPDY

SPDY is faster

(GZIP / Keep-Alive / initcwnd 10)

0s 1s 2s 3s 4s 5s 6s

HTTP

SPDY

Page 31: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Waterfall for HTTP Test

Page 32: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Waterfall for SPDY Test

Page 33: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

So which rules are most likely to be at risk?

- Split dominant content domains

- Reduce requests- Merging- Sprites- DataURIs

Page 34: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Sharding CSS background: url() images

Sharded page is much slower

0s 1s 2s 3s 4s 5s 6s 7s 8s

Sharded

Not Sharded

Page 35: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Connection to shard opened later

New TCP connectionopened

Page 36: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

New connection shouldn’t have been opened

http://www.stevesouders.com/blog/2013/09/05/domain-sharding-revisited/#comment-60146

“Both chrome and firefox will automatically unshard transparently for you when using spdy and both of the sharded hosts are at the same IP address and covered under one SSL cert (e.g. *.example.com).”

Patrick McManus, Mozilla

Page 37: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Sharding <img src=

Sharded page is marginally faster???

Sharded

Not Sharded

0s 1s 2s 3s 4s 5s 6s 7s 8s

Page 38: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Other tests carried out

- Sharding JS / CSS Horrible

- Merging CSS Slower

- Server Push No noticable difference

- jQuery from Google CDN Suprisingly quick

Page 39: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Hmm… How do we move forward?http://www.flickr.com/photos/atoach/6014917153

Page 40: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

It’s only going to get more complex

http://www.flickr.com/photos/freshwater2006/693945631

“Situational Performance Optimization, The Next Frontier”

Guy Podjarny

Page 41: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

http://www.flickr.com/photos/simeon_barkas/2557059247

Will complexity lead to the end of hand crafted optimisations?

Page 42: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

# Disable concatenation for SPDY/HTTP 2.0 clients

<ModPagespeedIf spdy> ModPagespeedDisableFilters combine_css,combine_javascript</ModPagespeedIf>

# Shard assets for HTTP 1.x clients only

<ModPagespeedIf !spdy> ModPagespeedShardDomain www.site.com s1.site.com,s2.site.com</ModPagespeedIf>

mod_pagespeed & mod_spdy == tools to experiment

High Performance Browser Networking, Ilya Grigorik

Page 43: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Start experimenting, share your experiences

http://www.flickr.com/photos/giosp/3933753363

Page 44: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

We need to improve our toolkit

http://www.flickr.com/photos/alexander/1146677

Page 45: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

SPDY waterfall in Firefox!

https://github.com/WPO-Foundation/webpagetest

We need to help fix things like this

Page 46: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Limits to what new protocols or automation can fix

Requests by Domain Bytes by Domain

Page 47: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

http://www.flickr.com/photos/rkramer62/4028530901

Page 48: Are Today’s Good Practices… Tomorrow’s Performance Anti-Patterns?

Thank You!@andydavies

[email protected] http://slideshare.net/andydavies

http://www.flickr.com/photos/nzbuu/4093456029