From 7419e536cf62cfddd872ed437943728c2577d08f Mon Sep 17 00:00:00 2001 From: yukaidi Date: Thu, 28 May 2026 23:08:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20JsExecUtils=20=E7=BC=93=E5=AD=98=20Scrip?= =?UTF-8?q?tEngineManager=EF=BC=8C=E9=81=BF=E5=85=8D=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E9=83=BD=E5=88=9B=E5=BB=BA=E6=96=B0=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ScriptEngineManager 是重量级对象(含类加载器扫描等),将其缓存为 static 字段, executeDynamicJs/executeOtherJs 每次调用只创建轻量的 ScriptEngine 实例。 --- parser/src/main/java/cn/qaiu/util/JsExecUtils.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/parser/src/main/java/cn/qaiu/util/JsExecUtils.java b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java index 62f8a9c..6ae420f 100644 --- a/parser/src/main/java/cn/qaiu/util/JsExecUtils.java +++ b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java @@ -21,11 +21,11 @@ import static cn.qaiu.util.AESUtils.encrypt; */ public class JsExecUtils { private static final Invocable inv; + private static final ScriptEngineManager ENGINE_MANAGER = new ScriptEngineManager(); // 初始化脚本引擎 static { - ScriptEngineManager engineManager = new ScriptEngineManager(); - ScriptEngine engine = engineManager.getEngineByName("JavaScript"); // 得到脚本引擎 + ScriptEngine engine = ENGINE_MANAGER.getEngineByName("JavaScript"); // 得到脚本引擎 try { engine.eval(JsContent.ye123); @@ -45,12 +45,11 @@ public class JsExecUtils { } /** - * 调用执行蓝奏云js文件 + * 调用执行蓝奏云js文件(每次动态JS代码,无法复用引擎) */ public static ScriptObjectMirror executeDynamicJs(String jsText, String funName) throws ScriptException, NoSuchMethodException { - ScriptEngineManager engineManager = new ScriptEngineManager(); - ScriptEngine engine = engineManager.getEngineByName("JavaScript"); // 得到脚本引擎 + ScriptEngine engine = ENGINE_MANAGER.getEngineByName("JavaScript"); // 得到脚本引擎 engine.eval(JsContent.lz + "\n" + jsText); Invocable inv = (Invocable) engine; //调用js中的函数 @@ -63,12 +62,11 @@ public class JsExecUtils { /** - * 调用执行蓝奏云js文件 + * 调用执行js文件(复用已缓存的引擎实例,避免每次创建) */ public static Object executeOtherJs(String jsText, String funName, Object ... args) throws ScriptException, NoSuchMethodException { - ScriptEngineManager engineManager = new ScriptEngineManager(); - ScriptEngine engine = engineManager.getEngineByName("JavaScript"); // 得到脚本引擎 + ScriptEngine engine = ENGINE_MANAGER.getEngineByName("JavaScript"); // 得到脚本引擎 engine.eval(jsText); Invocable inv = (Invocable) engine; //调用js中的函数