From 1fc4b22dd359c93306aa307d6b81a35a64bbcdba Mon Sep 17 00:00:00 2001 From: Will Binns-Smith Date: Thu, 31 Aug 2023 12:19:42 -0700 Subject: [PATCH] Don't send tracing spans if performance.measure doesn't return measurements (#54808) Fixes #54389. Old versions of Safari appear to return `undefined` from `performance.measure()` instead of `PerformanceMeasure` values. Closes WEB-1477 --- packages/next/src/client/index.tsx | 33 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/packages/next/src/client/index.tsx b/packages/next/src/client/index.tsx index cd0a8d601bfb2..9fe9d223db118 100644 --- a/packages/next/src/client/index.tsx +++ b/packages/next/src/client/index.tsx @@ -466,19 +466,26 @@ function markHydrateComplete(): void { 'afterHydrate' ) - tracer - .startSpan('navigation-to-hydration', { - startTime: performance.timeOrigin + beforeHydrationMeasure.startTime, - attributes: { - pathname: location.pathname, - query: location.search, - }, - }) - .end( - performance.timeOrigin + - hydrationMeasure.startTime + - hydrationMeasure.duration - ) + if ( + process.env.NODE_ENV === 'development' && + // Old versions of Safari don't return `PerformanceMeasure`s from `performance.measure()` + beforeHydrationMeasure !== undefined && + hydrationMeasure !== undefined + ) { + tracer + .startSpan('navigation-to-hydration', { + startTime: performance.timeOrigin + beforeHydrationMeasure.startTime, + attributes: { + pathname: location.pathname, + query: location.search, + }, + }) + .end( + performance.timeOrigin + + hydrationMeasure.startTime + + hydrationMeasure.duration + ) + } if (onPerfEntry) { performance.getEntriesByName('Next.js-hydration').forEach(onPerfEntry)