]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
perf(reactivity): cache tracking value (#11145)
authorTycho <jh.leong@outlook.com>
Sat, 22 Jun 2024 08:57:25 +0000 (16:57 +0800)
committerGitHub <noreply@github.com>
Sat, 22 Jun 2024 08:57:25 +0000 (16:57 +0800)
packages/reactivity/src/effect.ts

index 8eb1abdab255c0eeb417bcc3e909c11c7697f290..6817931f0e54657b938e109a2fecd3d4349f52fc 100644 (file)
@@ -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)