ソースを参照

Attempt memory leak fix from using magics (#2832)

* Attempt memory leak fix from using magics

* another potential fix for memory leak with magics

maybe safer for some types of consumption

---------

Co-authored-by: Byron Anderson <byron@geometer.io>
Byron Anderson 2 年 前
コミット
61bef0dcf1
1 ファイル変更13 行追加6 行削除
  1. 13 6
      packages/alpinejs/src/magics.js

+ 13 - 6
packages/alpinejs/src/magics.js

@@ -11,17 +11,24 @@ export function magic(name, callback) {
 
 export function injectMagics(obj, el) {
     Object.entries(magics).forEach(([name, callback]) => {
-        Object.defineProperty(obj, `$${name}`, {
-            get() {
+        let memoizedUtilities = null;
+        function getUtilities() {
+            if (memoizedUtilities) {
+                return memoizedUtilities;
+            } else {
                 let [utilities, cleanup] = getElementBoundUtilities(el)
                 
-                utilities = {interceptor, ...utilities}
+                memoizedUtilities = {interceptor, ...utilities}
                 
                 onElRemoved(el, cleanup)
-
-                return callback(el, utilities)
+                return memoizedUtilities;
+            }
+        }
+        
+        Object.defineProperty(obj, `$${name}`, {
+            get() {
+                return callback(el, getUtilities());
             },
-
             enumerable: false,
         })
     })