目前,我使用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