Browse Source

perf(reactivity): cache tracking value (#11145)

Tycho 1 year ago
parent
commit
7936daebce
1 changed files with 8 additions and 3 deletions
  1. 8 3
      packages/reactivity/src/effect.ts

+ 8 - 3
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)