Ver código fonte

fix: javascript block code getting slower over time

Ahmad Kholid 1 ano atrás
pai
commit
7c9fc3d5a3

+ 1 - 1
src/content/handleSelector.js

@@ -36,7 +36,7 @@ export function queryElements(data, documentCtx = document) {
       if (isElNotFound && data.waitForSelector) {
         setTimeout(findSelector, 200);
       } else {
-        clearTimeout(timeout);
+        if (timeout) clearTimeout(timeout);
         resolve(elements);
       }
     };

+ 19 - 8
src/workflowEngine/blocksHandler/handlerJavascriptCode.js

@@ -16,7 +16,7 @@ import {
 
 const nanoid = customAlphabet('1234567890abcdef', 5);
 
-function getAutomaScript(varName, refData, everyNewTab, isEval = false) {
+function getAutomaScript({ varName, refData, everyNewTab, isEval = false }) {
   let str = `
 const ${varName} = ${JSON.stringify(refData)};
 ${automaRefDataStr(varName)}
@@ -74,12 +74,12 @@ async function executeInWebpage(args, target, worker) {
   const { debugMode } = worker.engine.workflow.settings;
   const cspResult = await checkCSPAndInject({ target, debugMode }, () => {
     const { 0: blockData, 1: preloadScripts, 3: varName } = args;
-    const automaScript = getAutomaScript(
+    const automaScript = getAutomaScript({
       varName,
-      blockData.refData,
-      blockData.data.everyNewTab,
-      true
-    );
+      isEval: true,
+      refData: blockData.refData,
+      everyNewTab: blockData.data.everyNewTab,
+    });
     const jsCode = jsContentHandlerEval({
       blockData,
       automaScript,
@@ -124,7 +124,14 @@ export async function javascriptCode({ outputs, data, ...block }, { refData }) {
     frameSelector: this.frameSelector,
   };
   if (data.code.includes('automaRefData')) {
-    payload.refData = { ...refData, secrets: {} };
+    const newRefData = {};
+    Object.keys(refData).forEach((keyword) => {
+      if (!data.code.includes(keyword)) return;
+
+      newRefData[keyword] = refData[keyword];
+    });
+
+    payload.refData = { ...newRefData, secrets: {} };
   }
 
   const preloadScriptsPromise = await Promise.allSettled(
@@ -155,7 +162,11 @@ export async function javascriptCode({ outputs, data, ...block }, { refData }) {
   const automaScript =
     data.everyNewTab && (!data.context || data.context !== 'background')
       ? ''
-      : getAutomaScript(instanceId, payload.refData, data.everyNewTab);
+      : getAutomaScript({
+          varName: instanceId,
+          refData: payload.refData,
+          everyNewTab: data.everyNewTab,
+        });
 
   if (data.context !== 'background') {
     await waitTabLoaded({

+ 9 - 2
src/workflowEngine/utils/testConditions.js

@@ -88,20 +88,27 @@ export default async function (conditionsArr, workflowData) {
     if (type.startsWith('code')) {
       let conditionValue;
 
+      const newRefData = {};
+      Object.keys(workflowData.refData).forEach((keyword) => {
+        if (!copyData.code.includes(keyword)) return;
+
+        newRefData[keyword] = workflowData.refData[keyword];
+      });
+
       if (workflowData.isMV2) {
         conditionValue = await workflowData.sendMessage({
           type: 'condition-builder',
           data: {
             type,
             data: copyData,
-            refData: workflowData.refData,
+            refData: newRefData,
           },
         });
       } else {
         conditionValue = await workflowData.checkCodeCondition({
           data: copyData,
+          refData: newRefData,
           isPopup: workflowData.isPopup,
-          refData: workflowData.refData,
         });
       }