-
Notifications
You must be signed in to change notification settings - Fork 169
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
MWPW-158071: Optimize LCP loading times #2914
MWPW-158071: Optimize LCP loading times #2914
Conversation
@@ -731,6 +731,8 @@ function decorateDefaults(el) { | |||
} | |||
|
|||
function decorateHeader() { | |||
const breadcrumbs = document.querySelector('.breadcrumbs'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I noticed that if a breadcrumbs is authored as first block, we immediately load it. The global-navigation should take care of this and on L752 we move the breadcrumbs into the header if (breadcrumbs) header.append(breadcrumbs);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mokimo where are you seeing that we immediately load this? For me it looks like it was already working properly before any change here. 😅
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here's a test experience @vhargrave https://main--milo--adobecom.aem.page/drafts/osahin/education
When you turn the header off, it treats the breadcrumbs as block, which 404s. PS: I noticed my comment might have been a bit misleading, the issue is that we try to load it as a block, but if there is no header - there is no breadcrumbs, so we should remove it to safeguard authoring mistakes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah ok, i see thanks 👍
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## stage #2914 +/- ##
========================================
Coverage ? 96.27%
========================================
Files ? 238
Lines ? 54527
Branches ? 0
========================================
Hits ? 52497
Misses ? 2030
Partials ? 0 ☔ View full report in Codecov by Sentry. |
nala tests also failing on stage: #2910 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. Are there any unit tests for utils that require updating?
This pull request is not passing all required checks. Please see this discussion for information on how to get all checks passing. Inconsistent checks can be manually retried. If a test absolutely can not pass for a good reason, please add a comment with an explanation to the PR. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good 👍
Maybe we can get the psi check to also pass.
|
@JasonHowellSlavin I've added a unit test covering the new behavior, other than that the old ones should continue working as is |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looking pretty good!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Glad you managed to avoid calling the placeholder logic multiple times. This is worth trying out; in the future, we might want to get data on additional blocks that might be used as LCP and expand the current marquee list.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looking good!
i think the loadLink method would be good to take a look at, but defnitely out of scope for your ticket.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ready to stage , Regression PASS , testing details https://jira.corp.adobe.com/browse/MWPW-158913
Description
It's relatively hard to track performance beforehand, however we observed a +500MS (13%) gain on CC pages speeding up loading placeholders. We've also seen good success with preloading
Decorate.js
This PR initially introduced the idea of preloading
decorate.js
for a performance gain, but introduced too much flexibility. The idea of preloadingdecorate.js
for specifically the two common (hero-)marquees blocks is valuable and worth the added 3 lines of code, as neither is likely to change anytime soon.Impressions
This should provide good benefits on a wide arrange of blocks, consumers and pages by optimizing the load order and chains, however we will want to observe the CRUM/RUM/CRUX data after merging the changes in this PR.
Given the success we seen with preloading & parallelizing work in general, this harmonizes the timeline and ensures the browser loads everything as fast as it can, without any impact on TBT/CLS.
Before
After
Resolves: MWPW-158071
Test URLs:
Bacom
CC