Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@tunetheweb
Copy link
Member

@tunetheweb tunetheweb commented Jan 19, 2023

Warning: This branch is likey to stay in draft for some time, and not to be merged into main until the Soft Navs experiment completes

Fixes #119

Implements experimental support of Soft Navigations to the library:

  • - Updated README
  • - TTFB
  • - FCP (not currently emitted by Chrome at this time).
  • - LCP
  • - CLS
  • - INP
  • - Attribution (particularly navigationTiming)
  • - Test Cases (needs to wait for a supporting version of Chrome to be available in WDIO)

Copy link
Member

@mmocny mmocny left a comment

Choose a reason for hiding this comment

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

Hey, this is excellent work. Quite a bit to get right, thanks for the effort!

I only review the CLS changes, and I think there's a potentially cleaner way to do it. I didn't review the specifics of the other metrics since I the change would alter a lot there too, so wanted to discuss that first.

Basically:

  • I think the observe() helper, which all metrics use, should be the only place where we look at navigationID and split entries whenever it changes. See: https://github.com/GoogleChrome/web-vitals/blob/main/src/lib/observe.ts#L52
  • Whenever navigationID changes (or, the first time for initial nav), that helper can look up pageURL, etc, that way we have shared cache for all metrics
  • Each metric implementation right now already uses helpers like onFCP, onHidden, onBFCacheRestore... in order to "finalize" and/or "reset" its metrics. I think we could have another helper like onNavigate(), which can be used to flush/reset metrics.

One tricky bit may be that the onNavigate() helper needs to be called before any new Entry that uses that navigationID, and you could have entries with different navigationID in a single PerformanceObserver callbacks, especially when using buffered entries.

That said, I think all this code made be fragile to such cases and needs careful testing.

Keep at it!

@tunetheweb
Copy link
Member Author

That’s for the review @mmocny ! I’ve cleaned it up quite a bit further so it’s a bit smaller now. Have another look if you get a chance and see what you think now.

@alekseykulikov
Copy link

Hey! I'm super excited about this work. Could you republish the branch?
The current 3.1.1-soft-navs doesn't report LCP and instead prints BARRY.
Screen Shot 2023-02-08 at 22 30 06

@tunetheweb
Copy link
Member Author

Well that's embarrassing! Republished to the soft-navs tag (which is an alias to 3.1.1-soft-navs-1 now).

@alekseykulikov
Copy link

Thanks, that was fast.
Maybe, I'm doing something wrong, but there's still no LCP report, despite actual values are available (Chrome 110):
Screen Shot 2023-02-08 at 23 00 17

@tunetheweb
Copy link
Member Author

Updated this branch to v4 code.

@wolt-kgarg
Copy link

Hi @tunetheweb has there been any updates on the soft nav experiments, the last update was in August 2024 in this blog. I also couldn't find any way to enable the soft nav in chrome, is this enabled by default? Would appreciate any pointers here. TIA.

@tunetheweb
Copy link
Member Author

Stay tuned! Lots of updates coming in next month or so as we’re kicking off a new origin trial on this.

@tunetheweb
Copy link
Member Author

Please see the latest updates here:
https://developer.chrome.com/blog/new-soft-navigations-origin-trial

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Web Vital Metrics for Single Page Applications

5 participants