2014-02-06 2 views
0

우리는 자바 응용 프로그램에서 자바 스크립트를 평가하기 위해 Rhino 엔진을 사용합니다 (자바 스크립트를 매개 변수화로 사용합니다 .DTO -s와 조건의 매개 변수화간에 데이터 전달). 우리는 약간의 성능 테스트를하고 그 결과는 매우 이상합니다.다중 스레드 된 자바 응용 프로그램에서의 자바 스크립트 평가

자바 스크립트 엔진은 매우 느립니다. 그리고 지속 기간은 기하 급수적으로 증가합니다. 전체 엔진을 Nashron으로 변경하는 것에 대해 생각하지만 그 전에는 지금 가지고있는 것을 개선하려고합니다. 그 우리 후

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(); 
} 

:

우리가 그것을 사용하는 방법에 대한 몇 가지 코드 조각은 내가 내가 JavaScriptEval을 만드는 식을 평가하려고 할 때마다이 방법을 객체 (? 어쩌면 문제는() 여기)

public Object eval(Object scriptId, String source){ 
    Object ret; 
    ret = ctx.evaluateString(this.scope,source, scriptId.toString(), 1, null); 
    return ret; 
} 
,369 : 예를 들어 개체 - 추가 DTO는 우리가 우리의 표현이 방법을 평가하고 그 후 범위

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); 
    } 
} 

에 -S-

어떤 종류의 캐싱을 사용해 보았습니다. compileString 메서드를 사용한 다음 캐시에 저장했습니다. 그러나 메모리 사용량이 그렇게 많이 높았습니다.

그 후에 나는 캐시에 넣은 자바 스크립트 소스의 길이를 제한하려고합니다. 그러나 동시 사용률을 높이는 것과 같은 문제는 성능이 끔찍했습니다.

아이디어가 있으십니까? 모든 제안은 내가 좋은 답변이 그 :)

거기 아니라고 생각

답변

0

환영하지만 난 문제를 해결 : 나는 표현을 미리 컴파일과 간단한 초기화 (dto.setA 같은이 (있다면 1)) 자바 코드로 실행하면된다.

또 다른 방법은 분리 된 캐시를 분리 된 프로세스에 사용하고 삭제하는 것입니다.

이 문제를 해결하기위한 매우 구체적인 방법이지만 나에게 적합하다.

관련 문제