Commit 52be861
authored
fix(browser-utils): Ensure web vital client hooks unsubscribe correctly (#17272)
So this was a fun one to track down 😅
In our standalone span web vitals code, we register multiple client
hooks to listen e.g. for `afterStartPageloadSpan` events. This hook will
only fire once (by design), so we want to unsbscribe from it afterwards.
Howerver, we register two callbacks (one for LCP, once for CLS). Because
we used to unsubscribe synchronously from within the client hook
callback, we synchronously removed the callback from the client's hooks
array. This synchronous array mutation (shrinking) caused the second
callback to no longer be executed.
This surfaced by the LCP span being sent but the CLS span not being
sent, due to the CLS span's hook callback no longer being called.
This PR fixes this incorrect unsubscription by deferring the
unsubscription calls to the next tick. This way, the array mutation no
longer happens synchronously and all remaining callback hooks are
invoked correctly.
If you're confused by this, rest assured, I was too 😅 Happy to explain
better/in-person on request :D
closes
https://linear.app/getsentry/issue/JS-811/investigate-missing-standalone-cls-spans-in-latest-sdk-versions1 parent 5bf18c4 commit 52be861
1 file changed
+11
-3
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
229 | | - | |
230 | | - | |
| 229 | + | |
231 | 230 | | |
232 | 231 | | |
233 | 232 | | |
234 | 233 | | |
235 | 234 | | |
236 | | - | |
| 235 | + | |
237 | 236 | | |
238 | 237 | | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
0 commit comments