2011-09-24 5 views
3

브라우저에서 일부 텍스트 처리를하고 있는데 거친 것인가? 아이디어가 CPU 바운드인지 I/O 바운드인지 알 수 있습니다. . 방정식의 CPU 측의 속도를 테스트하기 위해, 일단 메모리에 있으면 얼마나 빨리 텍스트 조각 (~ 8.9MB - Project Gutenberg의 Sherlock Holmes 번 이상 반복)을 Javascript로 분할 할 수 있는지보고 있습니다. . 지금 내가하고있는 일은 간단합니다 :자바 스크립트에서 공백으로 텍스트 파일을 분할하는 가장 빠른 방법

pieces = theText.split(" "); 

그리고 이것을 100 회 실행하고 평균을 취합니다. 2011 년형 Macbook Pro i5에서는 Firefox의 평균 분할 간격이 92.81ms, Chrome의 경우 237.27ms가 소요됩니다. 따라서 1000/92.81ms * 8.9MB = 95.8MBps가 CPU에서 발생합니다. 하드 디스크 I/O보다 약간 빠르지 만 그다지 빠르지는 않습니다.

  • 이 (등 등, 공백, 줄 바꿈에서 예를 들어, 분리) 간단한 텍스트 처리를 할 때 빨리하는 경향이 split()에 자바 스크립트 대안이 있습니까 :

    그래서 제 질문은 정말 세 부분입니까?

  • 근본적인 문자열 일치/알고리즘 제약으로 인해 여기에 보이는 광채가 나는 CPU 결과가 있습니까? 아니면 Javascript 실행이 느린 것입니까?
  • Javascript가 제한 요소 일 가능성이 있다고 생각한다면 다른 프로그래밍 언어의 비교 가능한 컴퓨터/비교 가능한 텍스트에서 훨씬 더 우수한 성능을 보여줄 수 있습니까?

편집 : WebWorkers를 사용하면 속도가 빨라질 것이라고 생각합니다. 그러나 지금은 주로 단일 스레드 방식에 관심이 있습니다.

+2

쉬운 성능 테스트 (특히 여러 브라우저의 여러 시나리오 비교)를 위해 http://jsperf.com을 사용할 수 있습니다. – jfriend00

답변

2

지금까지 내가 루프로 분할을 알고있는 가장 빠른 방법은 자바 스크립트에서 간단한 텍스트 처리를 할 수 있습니다. 정규 표현식보다 빠르며 여기 jsperf에 대한 링크가 있습니다 http://jsperf.com/query-str-parsing-regex-vs-split/2

관련 문제