我們使用Rhino引擎在我們的javaEE應用程序中評估javascript(我們使用javascript作爲參數化,在DTO -s之間傳遞數據以及條件參數化等)。 我們做了一些性能測試,結果很奇怪。在多線程java應用程序中的javascript評估
javascript引擎非常慢。持續時間呈指數增長。 我想將整個引擎改爲納什龍,但在此之前我試圖改進我們現在擁有的東西。
關於我們使用它的方式有些代碼片段(也許問題就在這裏()?) 每次我試圖評估我創建了一個JavaScriptEval表達對象是這樣的:
public void init() {
Context cc = Context.getCurrentContext();
if (cc == null) {
cc = Context.enter();
}
this.ctx = cc;
this.scope =this.ctx.initStandardObjects(null);
this.wrapFactory = new WrapFactory();
}
,我們之後添加對象 - 例如DTO -S-的範圍
private void putObject(String id, Object obj) {
Context ctx = setupContext();
if (obj != null) {
Scriptable paramWrapper = this.wrapFactory.wrapAsJavaObject(/*this.ctx*/ ctx, this.scope, obj, obj.getClass());
this.scope.put(id, this.scope, paramWrapper);
}
}
之後,我們評估我們的表現是這樣的:
public Object eval(Object scriptId, String source){
Object ret;
ret = ctx.evaluateString(this.scope,source, scriptId.toString(), 1, null);
return ret;
}
我試過使用某種緩存。我使用了compileString方法,然後將其放入緩存中。但是這種方式的內存使用率非常高。
之後,我嘗試限制我放入緩存的javascript源的長度。但問題與增加併發使用情況相同,性能很差。
有什麼想法? 所有建議,歡迎