目前,我使用Rhino引擎在服务器端执行一些JavaScript代码的大块。但是,有时需要很长时间(超过10分钟),并且吃掉所有CPU使用率(至少在我的本地开发环境中,它现在正在这样做)。在Java中执行JavaScript代码的更快方法(sdk1.4)
所以我想知道我能做些什么来改善目前的系统,或者我可以尝试一个新的。
任何想法将不胜感激。
谢谢!
PLUS: 它抛出异常,而代码是太大了: java.lang.Exception的:没有与当前线程关联语境
目前,我使用Rhino引擎在服务器端执行一些JavaScript代码的大块。但是,有时需要很长时间(超过10分钟),并且吃掉所有CPU使用率(至少在我的本地开发环境中,它现在正在这样做)。在Java中执行JavaScript代码的更快方法(sdk1.4)
所以我想知道我能做些什么来改善目前的系统,或者我可以尝试一个新的。
任何想法将不胜感激。
谢谢!
PLUS: 它抛出异常,而代码是太大了: java.lang.Exception的:没有与当前线程关联语境
您可以运行它之前编译脚本和缓存编译版本 看http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/javax/script/CompiledScript.html
(编辑:OPS ...我不知道这是否会在SDK 1.4工作)
我们首先要知道有多大的JavaScript块,你正在执行? 10行? 50行? 1000线?
如果它获得50+,那么编译可能会有帮助。由于您使用1.4,您必须使用官方的Rhino发行版,而不是javax.script。在那种情况下,只需使用rhino compiler。
首先,你有没有分析你的程序?也许是其他事情导致这个问题。
你确定你的算法尽可能高效吗?
请指责犀牛
前考虑这些你生成数据库整个javascript代码动态?也许你可以考虑写一个修复一段代码,而像填充数据到代码的功能:
ScriptableObject.putProperty(scope, "out", out);
ScriptableObject.putProperty(scope, "script", script);
那么你可以编译它,并存储“范围”的地方,并重新使用它。
使用最新版本的Rhino,它在发行版中始终有一个'jdk1.4'jar,使用它,也许会有所帮助。
在研究*平台*可以为您做什么之前,您需要弄清楚您的软件出了什么问题。找出它花在哪里的时间,并且你可能会发现一些使用低效算法的不好的代码。没有更好的翻译会帮助这一点。 – Pointy 2010-07-15 18:47:32
@点我希望我能。但是,JavaScript不在我的控制之下...... :( – Jay 2010-07-15 19:25:06
好吧,我现在可以告诉你几乎100%的确定性,即使代码是100%,你的Javascript解释器没有任何改进会产生显着的差异, CPU限制(当然,这是你在进行实验之前应该验证的东西,我建议,如果它像数据库一样等待外部活动,那么显然它不是一个脚本性能问题。) – Pointy 2010-07-15 20:25:30