Simon Hearne
Web Performance Consultant
![]() |
The BBC loses an additional 10% of users for every additional second it takes to load |
![]() |
Pinterest improved load time by 40% and saw 15% increase in SEO traffic and 15% increase in conversions |
![]() |
The Financial times increased user engagement by 30% when they released the new, performance focused FT.com |
*mPulse only
*mPulse only
Time to First Byte (TTFB) | The speed of the delivery stack |
DOM Content Loaded (DCL) | The speed of critical dependencies |
First Paint (FP) | The first time something is rendered |
First Contentful Paint (FCP) | When the user might first see content |
Time To Visually Ready (TTVR) | When key content is rendered |
Page Load Time (PLT) | When the page is complete |
Time To Interactive (TTI) | When the app is first responsive to input |
First Input Delay (FID) | How long it takes to respond to input |
* rate of visitors who visit another page after this one
Timer | Goal Speed |
---|---|
First Input Delay (FID) | 200ms |
Time to First Byte (TTFB) | 500ms |
First Contentful Paint (FCP) | 1,000ms |
DOM Ready | 2,500ms |
Time To Visually Ready (TTVR) | 2,500ms |
Page Load Time (PLT) | 3,000ms |
Time To Interactive (TTI) | 4,000ms |
Based on aggregate data - what are yours?
we had a collection of very old scripts and couldn’t track the original requester. We removed those on the premise that, if they were important, people would get back in touch — no one did.
A simple header:
Content-Security-Policy: default-src 'self'; report-uri http://mysite.com/csp-reports/
JSON violation reports:
{
"csp-report": {
"document-uri": "http://example.org/page.html",
"referrer": "http://evil.example.com/",
"blocked-uri": "http://evil.example.com/evil.js",
"violated-directive": "default-src 'self'",
"original-policy": "default 'self'; report-uri http://mysite.com/csp-reports/"
}
}
Always serve quickly, with minimum risk of stale content
Preloading fonts cheats the browser!
Swap in the brand font when it downloads
font-display: [swap|fallback|optional]
The single biggest improvement (and easiest to implement technically) came from deferring all JavaScript, including our own.
If you're not actively measuring site speed, start now!
Correlate speed with behaviour
Find your sweet spots and set speed goals
simonhearne.com/presentations/digital-revenue/