2014-11-16 4 views
0

현재 JS 지원 (실제 프로그램은 C#으로 작성)이 필요하며 인터프리터로 Jint를 사용하고 있습니다. 추가 작업을 수행하기 전에 컴파일러 (예 : Chrome V8)와 통역사의 차이점을 파악하기위한 기본 성능 테스트를 실행했습니다. 나는 50x 감속을 예상했으나 600x에 가까웠다. Chrome의 V8은 60-100ms가 걸리고 Jint는 60-70을 사용했습니다. 입니다.Jint는 문자열이 매우 느립니다.

내가 사용한 테스트는 Mozilla의 Dromaeo String 테스트 - http://dromaeo.com/?dromaeo/http://dromaeo.com/tests/dromaeo-object-string.html이며, DOM을 사용하지 않고 약간의 수정을가했습니다.

var sTime = new Date(); 
var startTest = function(){sTime = new Date();}; 
var test = function(name, fn){ fn(); }; 
var eTime = new Date(); 
var endTest = function(){eTime = new Date(); console.log(eTime.getTime() - sTime.getTime());}; 
var prep = function(fn){ fn(); }; 

제 질문은 : 왜 Jint는 V8/native 컴파일보다 600-1000 배 느린가요? 통역사가 실제로 그렇게 느린가 아니면 Jint가 특히 느린 특별한 경우입니까?

편집 여기 내 테스트 코드를 게시 한 : http://pastebin.com/R017KKvR

그 테스트를 완료하는 데 24-26초을 복용 string.lastIndexOf 문제 것 같다입니다.

답변

0

Jint v2 이상을 사용한다고 가정합니다.

V8은 거의 모든 시나리오에서 항상 빠릅니다. 당신이 질문을 언급하는 것은 실제로 얼마나 많은가에 달려 있습니다. 해석에 미치는 영향 시간이 스크립트

  • 얼마나 잘 실행하는 않는 얼마나

    • 및 최적화 된 문자열 프로토 타입 방법은

    유일한 방법을 구현하는이 경우이 두 가지 요인에서 올 수 대답은 실제로 실행되는 스크립트의 성능을 프로파일 링하고 시간이 소비되는 곳을 이해하는 것입니다. 더 간단한 첫 번째 접근법은 각각의 그룹화 된 메소드 호출을 추적하여 전체 시간이 그 중 하나 또는 두 가지에서만 오는 것인지를 결정할 수 있습니다.

    당신은 거대한 성능 버그를 발견했을 것입니다. 나는 정말 고칠 수있어서 기쁠 것입니다. 고정

    업데이트

    이 커밋 : https://github.com/sebastienros/jint/commit/2ed825cda866092c728b07a9e2b6109b0d20cbc8 내가 요청 된 정보와 질문을 업데이트 한

  • +0

    . 'lastIndexOf'는 전체 테스트 시간의 3 분의 1에서 3 분의 2까지 걸리는 것으로 보입니다. –

    +0

    다음은 테스트의 실제 출력입니다. http://pastebin.com/jftZS9pH –

    +0

    이보다 더 많은 시간이 걸리므로 이것이 확실히 조사해야한다고 가정 해 봅시다. 모든 테스트가 거의 동일한 영향을 미친다 고 가정합니다. –