이 예보다 빠른 JavaScript 문자열 연결?
-
03-07-2019 - |
문제
나는 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에서 잃을 수 있습니다. 반면에 배열을 항상 범위로 남겨두고 재사용하지 않으면 좋은 해결책이 될 수 있습니다.
개인적으로 나는 가장 단순한 솔루션을 원합니다 : += 연산자를 사용하기 만하면됩니다.
당신은 조금 더 속도를 얻을 수 있습니다 버퍼링.