2017-04-26 18 views
-2

샘플 프로그램 내 프로그램에서Nashorn JS 평가는 코뿔소 JS

ScriptEngineManager mgr = new ScriptEngineManager(); 
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript"); 
System.out.println(jsEngine.eval("a>10 || b<10 || c=10")); 

내가 같이 IndexOf (같은 자바 스크립트 기능을 사용하는 식의 1000 년대를 평가하기 위해 위의 코드를 사용하고 있습니다), 대체 날짜 함수 많은 것보다 훨씬 느립니다 more. rhino에서 (플랫폼 자바 버전이 자바 7 일 때) nashorn보다 매우 빠른 표현식이 사용되었습니다. .... 적어도 15 ~ 20 배 더 빨리 말해야합니다 ....

자바와 코뿔소 사용 8은 지루한 작업 인 것처럼 보입니다 ... 다른 사람이 빨리 해결 방법을 제안 할 수 있습니까?

+0

그리고 속도는 어떻게 측정합니까? 실제로 실행 시간을 비교하는 샘플 코드가 있습니까? – pvg

+0

해결 방법 : 자신 만의 파서를 구현 하시겠습니까? 그것들은 단순한 논리적 표현 인 것 같습니다. – markspace

+0

@markspace 방금 간단한 표현 예제를 들었지만 indexof(), replace, date 및 many와 같은 자바 스크립트의 많은 함수를 사용하고 있습니다 ... 질문을 업데이트 할 것입니다. – Hadooplearner

답변

2

Rhino에는 인터프리터가 있으며 Nashorn은 모든 표현식을 JVM 바이트 코드로 컴파일 한 다음 생성 된 JVM 클래스를 내부적으로로드하고 실행합니다. 따라서 모든 분석은 파싱 외에도 바이트 코드 생성 및 JVM 클래스 로딩 비용을 발생시킵니다.

스크립트 엔진을 Compilable으로 전송하고 반복 호출을 위해 CompiledScript을 만드십시오.

한 번 평가 된 표현이 많다면 도움이되지 않지만 자주 평가되는 표현에는 도움이됩니다.

+0

답변을 주셔서 감사합니다. 이 변경 후 성능이 크게 향상되었습니다. – Hadooplearner