2010-07-15 113 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​​,使用它,也許會有所幫助。