Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

core: update FCP score curve #12556

Merged
merged 3 commits into from
May 25, 2021
Merged

core: update FCP score curve #12556

merged 3 commits into from
May 25, 2021

Conversation

brendankenny
Copy link
Member

@brendankenny brendankenny commented May 25, 2021

Part of #11866

Updates the FCP score-curve control points to match the latest Lighthouse performance data and to align with other web performance tools.

Our FCP control points were last updated more than three years ago. It's not clear why FCP in HTTP Archive has trended lower over the time since (maybe changes in the sampled URLs?), but they clearly don't match the thresholds we would pick today.

Other tools are also trying to align on a set of FCP thresholds. At one point 1000ms/3000ms was recommended for FCP good/average thresholds (I believe that's what CrUX uses today), but more recent analysis has found the 1000ms to be difficult to be widely achievable, and so the current recommendation for tooling is 1800ms/3000ms.

While in some cases a more easily achievable threshold might be too easy for Lighthouse, in this case it's such an improvement over the current speed curve that this seems like an excellent move.

In addition, if we were picking new control points without outside guidance, the May 2021 HTTP Archive run gives

p08 - 1787ms
p25 - 2595ms
(3000ms is closer to p35, but 2595ms is close enough that it seems ok)

With the change in HTTP Archive throttling in mind, we can also look at the July 2020 run, the month before the throttling change, and we find

p08 - 1662ms
P25 - 2484ms
(1800ms is closer to p10, 3000ms is closer to p40)

The old throttling is closer to what we see in CLI Lighthouse, so we could move to these even tougher numbers, but the proposed numbers are still a big improvement over the current control points and alignment would be ideal, so it seems worth moving to 1800/3000.

Desktop

There's no web vitals guidance for desktop specifically, but we documented using SELECT QUANTILES(renderStart, 21) FROM [httparchive:summary_pages.2018_12_15_desktop] LIMIT 1000 to derive the desktop control points. Running that today:

May 2021
p08 - 1000ms
p25 - 1500ms

July 2020
P08 - 1000ms
P25 - 1600ms

These match our current values (934/1600) very closely, so I suggest we leave them unchanged.

@brendankenny brendankenny requested a review from a team as a code owner May 25, 2021 17:04
@brendankenny brendankenny requested review from patrickhulce and removed request for a team May 25, 2021 17:04
@google-cla google-cla bot added the cla: yes label May 25, 2021
@brendankenny brendankenny mentioned this pull request May 25, 2021
17 tasks
Comment on lines +35 to +36
p10: 2700,
median: 4500,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these are updated based on the 1.5x multiplier mentioned above applied to the updated control points

const result = await FcpAudit.audit(artifacts, context);
assert.equal(result.score, 0.06);
assert.equal(result.numericValue, 5668.275);
});
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we didn't have any unit test that needed updating from the score change (aside from sample_v2 snapshot ones), which is always suspicious, so added one here

@@ -29,12 +29,11 @@ class FirstContentfulPaint3G extends Audit {
*/
static get defaultOptions() {
return {
// 25th and 5th percentiles HTTPArchive on Fast 3G -> multiply by 1.5 for RTT differential -> median and PODR
// p10 is then derived from them.
// 25th and 8th percentiles HTTPArchive on Slow 4G -> multiply by 1.5 for RTT differential -> median and p10.
// https://bigquery.cloud.google.com/table/httparchive:lighthouse.2018_04_01_mobile?pli=1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

isnt the dataset different?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah yeah, good catch

@erickfogtman
Copy link

Hey there!

Considering these changes, the web.dev articles should be updated as well, right? For example, here it says a good score is less than 2s but that's not what you see on Lighthouse if you run a scan: https://web.dev/first-contentful-paint/#how-lighthouse-determines-your-fcp-score.

Thanks!

@brendankenny
Copy link
Member Author

Yes, definitely. The documentation changes unfortunately didn't land at the same time but the PR is pending for them: GoogleChrome/web.dev#5544

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants