[javascript] + 연산자는 StringBuffer.append ()보다 성능이 떨어집니다.

우리 팀에서는 일반적으로 다음과 같이 문자열 연결을 수행합니다.

var url = // some dynamically generated URL
var sb = new StringBuffer();
sb.append("<a href='").append(url).append("'>click here</a>");

분명히 다음은 훨씬 더 읽기 쉽습니다.

var url = // some dynamically generated URL
var sb = "<a href='" + url + "'>click here</a>";

그러나 JS 전문가들은 +운영자가 StringBuffer.append(). 정말 사실인가요?



답변

Internet Explorer는 오늘날 세계에서이 문제를 겪고있는 유일한 브라우저입니다. (버전 5, 6 및 7은 개가 느 렸습니다. 8은 동일한 성능 저하를 보여주지 않습니다.) 더욱이 IE는 문자열이 길수록 느려집니다.

연결할 긴 문자열이있는 경우 반드시 array.join 기술을 사용하십시오. (또는 가독성을 위해이 주위에 StringBuffer 래퍼가 있습니다.) 그러나 문자열이 짧다면 신경 쓰지 마십시오.


답변

귀하의 예는 성능이 크게 다를 가능성이 거의 없다는 점에서 좋은 예가 아닙니다. 귀하의 예제에서 가독성은 성능을 능가해야합니다. 왜냐하면 하나와 다른 하나의 성능 향상은 무시할 수 있기 때문입니다. 배열 (StringBuffer)의 이점은 많은 연결을 수행하는 경우에만 분명합니다. 그래도 마일리지는 브라우저에 따라 크게 달라질 수 있습니다.

다음은 다양한 브라우저에서 모든 다른 JavaScript 연결 방법을 사용하여 성능을 보여주는 자세한 성능 분석입니다. 스트링 성능 및 분석

join () 한 번, concat () 한 번, join () for, + = for, concat () for

더보기 :
Ajaxian >> IE의 문자열 성능 : Array.join 대 + = 계속


답변

예, 사실이지만 신경 쓰지 마세요. 읽기 쉬운 것을 선택하십시오. 앱을 벤치마킹해야한다면 병목 현상에 집중하세요.

문자열 연결이 병목 현상이되지 않을 것이라고 생각합니다.


답변

Michael Haren 과 동의 .

또한 성능이 실제로 문제가되는 경우 어레이 및 조인 사용을 고려하십시오.

var buffer = ["<a href='", url, "'>click here</a>"];
buffer.push("More stuff");
alert(buffer.join(""));


답변

이 시도:

var s = ["<a href='", url, "'>click here</a>"].join("");


답변

이미 일부 사용자가 언급했듯이 작은 문자열에는 관련이 없습니다.

그리고 Firefox, Safari 또는 Google Chrome의 새로운 JavaScript 엔진은

"<a href='" + url + "'>click here</a>";

빠르다

["<a href='", url, "'>click here</a>"].join("");


답변

JavaScript에는 네이티브 StringBuffer 객체가 없으므로 사용중인 라이브러리 또는 비정상적인 호스트 환경 (예 : 브라우저가 아님)의 기능에서 가져온 것이라고 가정합니다.

네이티브 StringBuffer 객체가 할 수 있지만 라이브러리 (JS로 작성된)가 더 빨리 생성되지 않을 것입니다. 확실한 대답은 프로파일 러에서 찾을 수 있습니다 (브라우저에서 실행중인 경우 Firebug는 Firefox에서 찾을 수있는 JS 엔진 용 프로파일 러를 제공합니다).