]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(devtools): fix memory leak when devtools is not installed (#4833)
authorChe Guevara <836934184@qq.com>
Tue, 2 Nov 2021 03:26:40 +0000 (11:26 +0800)
committerGitHub <noreply@github.com>
Tue, 2 Nov 2021 03:26:40 +0000 (23:26 -0400)
fix #4829

packages/runtime-core/src/devtools.ts

index b5cbe30608a06113810740e3c4d77f5f76eab954..2e09a2e24a13d31f4083e97b5bd85c27c8ccd0ef 100644 (file)
@@ -33,10 +33,12 @@ export let devtools: DevtoolsHook
 
 let buffer: { event: string; args: any[] }[] = []
 
+let devtoolsNotInstalled = false
+
 function emit(event: string, ...args: any[]) {
   if (devtools) {
     devtools.emit(event, ...args)
-  } else {
+  } else if (!devtoolsNotInstalled) {
     buffer.push({ event, args })
   }
 }
@@ -56,7 +58,10 @@ export function setDevtoolsHook(hook: DevtoolsHook, target: any) {
     // clear buffer after 3s - the user probably doesn't have devtools installed
     // at all, and keeping the buffer will cause memory leaks (#4738)
     setTimeout(() => {
-      buffer = []
+      if (!devtools) {
+        devtoolsNotInstalled = true
+        buffer = []
+      }
     }, 3000)
   }
 }