Breaking news at 1000ms @patrickhamann - FrontTrends - May 2014
next.theguardian.com
100million
0 2.25 4.5 6.75 9 2000 2006 2009 2012 User
load time expectations (Secs) User load time expectations are decreasing Source: Web Performance Today - March 2013
0 5000 10000 15000 20000 Jan Feb Mar Apr 10%
Percentile Median 90% Percentile Average SpeedIndex top 10,000 websites Source: HTTPArchive - May 2014
Maslow's hierarchy of user needs • We surveyed 3000 users
• About 17 key product drivers • They rated speed 2nd most important • Only after easy to find content
Time & user perception Delay User perception 0–100 ms Instant
100–300 ms Small perceptible delay 300–1000 ms Machine is working 1,000+ ms Likely mental context switch 10,000+ ms Task is abandoned Source: Ilya Grigorik – High-Performance Browser Networking
1000ms
A performance budget https://flic.kr/p/iQ69Kg
– Tim Kaldec - 2013 A performance budget is just
what it sounds like: you set a “budget” on your page and do not allow the page to exceed that. This may be a specific load time, but it is usually an easier conversation to have when you break the budget down into the number of requests or size of the page.
Setting a budget https://flic.kr/p/eHsirY
1. Core content should be delivered first 2. Core content
should render within 1000ms 3. Every feature must fail gracefully 4. Every request should be measured
1. Core content should be delivered first 2. Core content
should render within 1000ms 3. Every feature must fail gracefully 4. Every request should be measured
User Content API Popular Comments Article DB DB
https://flic.kr/p/77ZtUH
User Content API Popular Comments Article DB DB
Final progressively enhanced page Initial page payload
1. Core content should be delivered first 2. Core content
should render within 1000ms 3. Every feature must fail gracefully 4. Every request should be measured
Browser rendering 101
Source: Google - Pagespeed Insights
Network JavaScript Render tree Layout Paint HTML DOM CSS CSSOM
Network JavaScript Render tree Layout Paint HTML DOM CSS CSSOM Network JavaScript Render tree Layout Paint HTML DOM CSS CSSOM DOM
JS CSS HTML CSS & JS § HTML async DOMContentReady
Start render
Get the CSS down as soon as possible.
What is your critical CSS?
Popular content ✘ Sharing ✘ Comments ✘ Related content ✘
Commercial components ✘ Article ✔
What if we inlined our critical CSS?
WTF%$?! Inline critical CSS
0.9 1.0 1.1 0.9 1.0 1.1
Load time First byte Start render Visually complete 3.366s 0.204s
1.113s 3.700s Before Load time First byte Start render Visually complete 3.017s 0.262s 0.759s 2.00s After
Use MD5 hash for cache key WTF no stylesheets?
What does the future hold?
http/2
1. Core content should be delivered first 2. Core content
should render within 1000ms 3. Every feature must fail gracefully 4. Every request should be measured
Story of my life
– W3C Font Spec ! ! ! User agents may
render text as it would be rendered if downloadable font resources are not available or they may render text transparently with fallback fonts to avoid a flash of text using a fallback font. ! In cases where the font download fails user agents must display text, simply leaving transparent text is considered non-conformant behaviour.
Font loading 101 IE Firefox WebKit Blink Blocking ✗ ✔
✔ ✔ Timeout – 3s – – Source: Ian Feather – Web fonts and the Critical Path
guardian egyptian
progressive enhancement https://flic.kr/p/9RDXVd
Is modern browser? Support WOFF? Font in localStorage? Show font
Show fallback Download JSON localStorage space? Cache in localStorage
Example of base64 json’ifed fonts
service worker Webfontjson
What does the future hold?
Font load events
service worker ServiceWorker
1. Core content should be delivered first 2. Core content
should render within 1000ms 3. Every feature must fail gracefully 4. Every request should be measured
assets radiator
R.U.M. (real user metrics)
speedcurve
What does the future hold?
Resource Timing API
Beacon API
1. Core content should be delivered first 2. Core content
should render within 1000ms 3. Every feature must fail gracefully 4. Every request should be measured
Takeaways
Deliver core content first, then progressively enhance the extras.
Set a performance budget. Measure, optimise & repeat!
Performance is a requirement; not a feature.