Explorar el Código

perf: avoid now() overhead during dev measure calls

Evan You hace 1 año
padre
commit
e6ba91cfac

+ 11 - 2
packages/runtime-core/src/profiling.ts

@@ -5,6 +5,15 @@ import { devtoolsPerfEnd, devtoolsPerfStart } from './devtools'
 let supported: boolean
 let perf: Performance
 
+// To avoid the overhead of repeatedly calling Date.now(), we cache
+// and use the same timestamp for all event listeners attached in the same tick.
+let cachedNow: number = 0
+const p = /*@__PURE__*/ Promise.resolve()
+const getNow = () =>
+  cachedNow ||
+  (p.then(() => (cachedNow = 0)),
+  (cachedNow = isSupported() ? perf.now() : Date.now()))
+
 /**
  * @internal
  */
@@ -17,7 +26,7 @@ export function startMeasure(
   }
 
   if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) {
-    devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now())
+    devtoolsPerfStart(instance, type, getNow())
   }
 }
 
@@ -42,7 +51,7 @@ export function endMeasure(
   }
 
   if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) {
-    devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now())
+    devtoolsPerfEnd(instance, type, getNow())
   }
 }
 

+ 0 - 1
packages/runtime-vapor/src/renderEffect.ts

@@ -67,5 +67,4 @@ export function renderEffect(fn: () => void, noLifecycle = false): void {
   effect.run()
 
   // TODO recurse handling
-  // TODO measure
 }