目前,我正在使用 Rhino 引擎在服务器端执行一些大块的 javascript 代码。但是,有时,它需要很长时间(超过 10 分钟)并耗尽所有 CPU 使用率(至少在我的本地开发环境中,它现在正在这样做)。
所以我想知道我能做些什么来改进当前的系统,或者我可以在那里尝试一个新系统。
任何想法将不胜感激。
谢谢!
加:代码太大时抛出异常:java.lang.Exception:没有与当前线程关联的上下文
目前,我正在使用 Rhino 引擎在服务器端执行一些大块的 javascript 代码。但是,有时,它需要很长时间(超过 10 分钟)并耗尽所有 CPU 使用率(至少在我的本地开发环境中,它现在正在这样做)。
所以我想知道我能做些什么来改进当前的系统,或者我可以在那里尝试一个新系统。
任何想法将不胜感激。
谢谢!
加:代码太大时抛出异常:java.lang.Exception:没有与当前线程关联的上下文
您可以在运行之前编译脚本并缓存编译后的版本,请参见http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/javax/script/CompiledScript.html
(编辑:操作......我不知道这是否适用于 sdk 1.4)
我们首先必须知道您正在执行的 Javascript 块有多大?10行?50行?1000 行?
如果它得到 50+,那么编译可能会有所帮助。由于您使用的是 1.4,因此您必须使用官方的 Rhino 发行版而不是 javax.script。在这种情况下,只需使用rhino 编译器。
不过,首先,你有没有分析过你的程序?也许它是导致问题的其他原因。
您确定您的算法尽可能高效吗?
在指责犀牛之前请考虑这些
您从数据库动态生成整个 javascript 代码?也许您可以考虑编写一段修复代码,并使用以下功能将数据填充到代码中:
ScriptableObject.putProperty(scope, "out", out);
ScriptableObject.putProperty(scope, "script", script);
然后您可以编译它,并将“范围”存储在某处并重用它。
使用 Rhino 的最新版本,它在版本中总是有一个 'jdk1.4' jar,使用它,也许它会有所帮助。