Merged in fix/tracking-pageload-issues (pull request #1630)
fix(tracking): fixes not sending pageview events when promise isn't resolving * fix(tracking): fixes not sending pageview events when promise isn't resolving * Refactor Approved-by: Anton Gunnarsson
This commit is contained in:
@@ -13,6 +13,7 @@ import useRouterTransitionStore from "@/stores/router-transition"
|
||||
import useTrackingStore from "@/stores/tracking"
|
||||
|
||||
import { useSessionId } from "@/hooks/useSessionId"
|
||||
import { promiseWithTimeout } from "@/utils/promiseWithTimeout"
|
||||
import { createSDKPageObject, trackPageView } from "@/utils/tracking"
|
||||
|
||||
import type { TrackingSDKProps } from "@/types/components/tracking"
|
||||
@@ -52,7 +53,7 @@ export default function RouterTransition({
|
||||
hasRunInitial.current = true
|
||||
setHasRun()
|
||||
|
||||
const getPageLoadTime = () => {
|
||||
const getPageLoadTimeEntry = () => {
|
||||
return new Promise<number>((resolve) => {
|
||||
const observer = new PerformanceObserver((entries) => {
|
||||
const navEntry = entries.getEntriesByType("navigation")[0]
|
||||
@@ -65,23 +66,36 @@ export default function RouterTransition({
|
||||
})
|
||||
}
|
||||
|
||||
const getLCPTime = () => {
|
||||
return new Promise<number>((resolve) => {
|
||||
const getLCPTimeEntry = () => {
|
||||
return new Promise<number | undefined>((resolve) => {
|
||||
const observer = new PerformanceObserver((entries) => {
|
||||
const lastEntry = entries.getEntries().pop()
|
||||
const lastEntry = entries.getEntries().at(-1)
|
||||
if (lastEntry) {
|
||||
observer.disconnect()
|
||||
resolve(lastEntry.startTime / 1000)
|
||||
}
|
||||
})
|
||||
observer.observe({ type: "largest-contentful-paint", buffered: true })
|
||||
|
||||
const lcpSupported =
|
||||
PerformanceObserver.supportedEntryTypes?.includes(
|
||||
"largest-contentful-paint"
|
||||
)
|
||||
|
||||
if (lcpSupported) {
|
||||
observer.observe({
|
||||
type: "largest-contentful-paint",
|
||||
buffered: true,
|
||||
})
|
||||
} else {
|
||||
resolve(undefined)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const trackPerformance = async () => {
|
||||
const [pageLoadTime, lcpTime] = await Promise.all([
|
||||
getPageLoadTime(),
|
||||
getLCPTime(),
|
||||
promiseWithTimeout(getPageLoadTimeEntry(), 3000),
|
||||
promiseWithTimeout(getLCPTimeEntry(), 3000),
|
||||
])
|
||||
|
||||
const trackingData = {
|
||||
|
||||
Reference in New Issue
Block a user