From: Tycho Date: Sat, 22 Jun 2024 08:57:25 +0000 (+0800) Subject: perf(reactivity): cache tracking value (#11145) X-Git-Tag: v3.4.30~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7936daebceab2ae9461c3b8f256e51020fb7d3ed;p=thirdparty%2Fvuejs%2Fcore.git perf(reactivity): cache tracking value (#11145) --- diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index 8eb1abdab2..6817931f0e 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -308,14 +308,19 @@ export function triggerEffects( ) { pauseScheduling() for (const effect of dep.keys()) { + // dep.get(effect) is very expensive, we need to calculate it lazily and reuse the result + let tracking: boolean | undefined + if (!dep.computed && effect.computed) { - if (dep.get(effect) === effect._trackId && effect._runnings > 0) { + if ( + effect._runnings > 0 && + (tracking ??= dep.get(effect) === effect._trackId) + ) { effect._dirtyLevel = DirtyLevels.MaybeDirty_ComputedSideEffect_Origin continue } } - // dep.get(effect) is very expensive, we need to calculate it lazily and reuse the result - let tracking: boolean | undefined + if ( effect._dirtyLevel < dirtyLevel && (tracking ??= dep.get(effect) === effect._trackId)