문제

나는 JavaScript로 많은 줄을 연결해야하며 가장 빠른 방법을 찾고 있습니다. JavaScript가 자연스럽게 많은 작은 문자열로 구성된 큰 XML- "파일"을 만들어야한다고 가정 해 봅시다. 그래서 나는 다음과 같이 생각했다.

    var sbuffer = [];
    for (var idx=0; idx<10000; idx=idx+1) {
        sbuffer.push(‘<xmltag>Data comes here... bla... </xmltag>’);
    }
    // Now we "send" it to the browser...
    alert(sbuffer.join(”));

루프 나 예제를 작성하는 다른 "정교한"코드에주의를 기울이지 마십시오.

내 질문은 : 알려지지 않은 수의 문자열의 경우 많은 작은 문자열을 거대한 줄에 연결하는 더 빠른 알고리즘 / 방법 / 아이디어가 있습니까?

도움이 되었습니까?

해결책

라인 변경 :

sbuffer.push(‘Data comes here... bla... ’);

에게

sbuffer[sbuffer.length] = ‘Data comes here... bla... ’;

5-50%의 속도 이득을 제공합니다 (즉, 브라우저에 따라, 즉, 게인은 가장 높습니다)

문안 인사.

다른 팁

질문 JavaScript 문자열 연결 a JavaScript 문자열 연결 성능의 아주 좋은 비교.

편집하다:기사에서 알 수 있듯이 Duff의 장치를 사용하여 조금 더 성능을 발휘할 수 있다고 생각했을 것입니다.

나는 당신이 최적에 가깝다고 생각합니다. YMMV, 호스트 프로세스 (예 : 브라우저)의 JavaScript 엔진 내에서 많은 속도가 증가하거나 손실됩니다.

문자열을 배열로 밀고 배열에 결합하는 것이 JavaScript에서 문자열 연결을위한 가장 빠른 기술이라고 생각합니다. 이것에는 몇 가지지지 증거가 있습니다 W3C Dom vs. InnerHTML에 대한 토론. InnerHtml 1과 InnerHtml 2 결과의 차이에 유의하십시오.

내가 아는 한, 당신의 알고리즘은 좋고 문자열 연결 문제에 대한 성능 솔루션으로 알려져 있습니다.

즉, 나쁜 쓰레기 수집가를 조심하십시오! 사용 후 배열과 어떤 관련이 있습니까? 아마도 GC가 될까요?

결합과의 동의에서 Perfornace를 얻은 다음 Post-GC'ing에서 잃을 수 있습니다. 반면에 배열을 항상 범위로 남겨두고 재사용하지 않으면 좋은 해결책이 될 수 있습니다.

개인적으로 나는 가장 단순한 솔루션을 원합니다 : += 연산자를 사용하기 만하면됩니다.

당신은 조금 더 속도를 얻을 수 있습니다 버퍼링.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top