2010-07-15 111 views
1

目前,我使用Rhino引擎在服务器端执行一些JavaScript代码的大块。但是,有时需要很长时间(超过10分钟),并且吃掉所有CPU使用率(至少在我的本地开发环境中,它现在正在这样做)。在Java中执行JavaScript代码的更快方法(sdk1.4)

所以我想知道我能做些什么来改善目前的系统,或者我可以尝试一个新的。

任何想法将不胜感激。

谢谢!

PLUS: 它抛出异常,而代码是太大了: java.lang.Exception的:没有与当前线程关联语境

+0

在研究*平台*可以为您做什么之前,您需要弄清楚您的软件出了什么问题。找出它花在哪里的时间,并且你可能会发现一些使用低效算法的不好的代码。没有更好的翻译会帮助这一点。 – Pointy 2010-07-15 18:47:32

+0

@点我希望我能。但是,JavaScript不在我的控制之下...... :( – Jay 2010-07-15 19:25:06

+0

好吧,我现在可以告诉你几乎100%的确定性,即使代码是100%,你的Javascript解释器没有任何改进会产生显着的差异, CPU限制(当然,这是你在进行实验之前应该验证的东西,我建议,如果它像数据库一样等待外部活动,那么显然它不是一个脚本性能问题。) – Pointy 2010-07-15 20:25:30

回答

0

您可以运行它之前编译脚本和缓存编译版本 看http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/javax/script/CompiledScript.html

(编辑:OPS ...我不知道这是否会在SDK 1.4工作)

+0

我严重怀疑 – Pointy 2010-07-15 18:45:32

+0

谢谢,事实上,javascript代码是从数据库动态生成的,并且不保证每次都是一样的,另外,我也不想牺牲编译时间,对不起,我没有做出假设在开始时。 – Jay 2010-07-15 18:49:18

0

我们首先要知道有多大的JavaScript块,你正在执行? 10行? 50行? 1000线?

如果它获得50+,那么编译可能会有帮助。由于您使用1.4,您必须使用官方的Rhino发行版,而不是javax.script。在那种情况下,只需使用rhino compiler

首先,你有没有分析你的程序?也许是其他事情导致这个问题。

你确定你的算法尽可能高效吗?

请指责犀牛

0

前考虑这些你生成数据库整个javascript代码动态?也许你可以考虑写一个修复一段代码,而像填充数据到代码的功能:

 ScriptableObject.putProperty(scope, "out", out); 
     ScriptableObject.putProperty(scope, "script", script); 

那么你可以编译它,并存储“范围”的地方,并重新使用它。

使用最新版本的Rhino,它在发行版中始终有一个'jdk1.4'jar​​,使用它,也许会有所帮助。