From f6f0240e61d2a49e97b0746d23a40e508cd4c2cd Mon Sep 17 00:00:00 2001 From: Isaac Hunja Date: Fri, 6 Mar 2026 07:44:54 +0300 Subject: [PATCH] fix: replace Date.now() with performance.now() in memo debug timing Next.js warns about Date.now() usage in client components because it can cause hydration mismatches between server and client renders. While the Date.now() calls in memo() are only used for debug timing and guarded behind opts.debug, Next.js statically detects Date.now() usage and shows the warning regardless. Switching to performance.now() resolves the warning and provides more precise timing measurements for debug output. The performance.now() API is available in all modern browsers and Node.js 12+, which aligns with the project's engine requirements. Fixes #6127 --- packages/table-core/src/utils.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/table-core/src/utils.ts b/packages/table-core/src/utils.ts index c1f02a7c61..cfc06e015d 100755 --- a/packages/table-core/src/utils.ts +++ b/packages/table-core/src/utils.ts @@ -147,7 +147,7 @@ export function memo( return (depArgs) => { let depTime: number - if (opts.key && opts.debug) depTime = Date.now() + if (opts.key && opts.debug) depTime = performance.now() const newDeps = getDeps(depArgs) @@ -162,15 +162,15 @@ export function memo( deps = newDeps let resultTime: number - if (opts.key && opts.debug) resultTime = Date.now() + if (opts.key && opts.debug) resultTime = performance.now() result = fn(...newDeps) opts?.onChange?.(result) if (opts.key && opts.debug) { if (opts?.debug()) { - const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100 - const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100 + const depEndTime = Math.round((performance.now() - depTime!) * 100) / 100 + const resultEndTime = Math.round((performance.now() - resultTime!) * 100) / 100 const resultFpsPercentage = resultEndTime / 16 const pad = (str: number | string, num: number) => {