내가 볼 몇 가지 코드 프로젝트 솔루션을 .
그러나 JavaScript에서 정기적으로 구현됩니까?
내가 볼 몇 가지 코드 프로젝트 솔루션을 .
그러나 JavaScript에서 정기적으로 구현됩니까?
답변:
Internet Explorer 용 코드를 작성해야하는 경우 배열 조인을 사용하는 구현을 선택했는지 확인하십시오. IE 에서 +
또는 +=
연산자로 문자열을 연결하면 속도가 매우 느립니다. IE6의 경우 특히 그렇습니다. 최신 브라우저 +=
에서는 일반적으로 배열 조인만큼 빠릅니다.
많은 문자열 연결을 수행해야 할 때 일반적으로 배열을 채우고 문자열 빌더 클래스를 사용하지 않습니다.
var html = [];
html.push(
"<html>",
"<body>",
"bla bla bla",
"</body>",
"</html>"
);
return html.join("");
이 push
메소드는 여러 인수를 허용합니다.
[foo(), "bar", "baz"].join("");
작동합니다.
push
여러 가지 주장을 받아 들일 수 있다는 것을 몰랐다 . 당신이 배우는 임의의 것들.
방금 http://jsperf.com/javascript-concat-vs-join/2 에서 성능을 다시 확인했습니다 . 테스트 사례는 알파벳을 1,000 번 연결하거나 연결합니다.
현재 브라우저 (FF, Opera, IE11, Chrome)에서 "concat"은 "join"보다 약 4-10 배 빠릅니다.
IE8에서는 둘 다 동일한 결과를 반환합니다.
IE7에서 "join"은 불행히도 약 100 배 더 빠릅니다.
아니요, 문자열 작성에 대한 기본 지원은 없습니다. 대신 연결을 사용해야합니다.
물론 문자열의 다른 부분으로 구성된 배열을 만든 다음 join()
해당 배열 을 호출 할 수 있지만 사용중인 JavaScript 인터프리터에서 조인이 구현되는 방식에 따라 다릅니다.
str1+str2
방법 의 속도와 방법 의 속도를 비교하기 위해 실험을했습니다 array.push(str1, str2).join()
. 코드는 간단했다 :
var iIterations =800000;
var d1 = (new Date()).valueOf();
str1 = "";
for (var i = 0; i<iIterations; i++)
str1 = str1 + Math.random().toString();
var d2 = (new Date()).valueOf();
log("Time (strings): " + (d2-d1));
var d3 = (new Date()).valueOf();
arr1 = [];
for (var i = 0; i<iIterations; i++)
arr1.push(Math.random().toString());
var str2 = arr1.join("");
var d4 = (new Date()).valueOf();
log("Time (arrays): " + (d4-d3));
Windows 7 x64에서 Internet Explorer 8 및 Firefox 3.5.5에서 테스트했습니다.
처음에는 적은 수의 반복 (약 수백, 수천 개의 항목)을 테스트했습니다. 결과는 예측할 수 없었습니다 (때때로 문자열 연결에는 0 밀리 초가 걸리고 때로는 16 밀리 초가 걸리며 배열 결합과 동일 함).
카운트를 50,000으로 늘리면 브라우저마다 결과가 달랐습니다 .Internet Explorer에서 문자열 연결이 더 빨라졌고 (94 밀리 초) 조인이 느 렸습니다 (125 밀리 초). 파이어 폭스에서는 배열 조인이보다 빠릅니다 (113 밀리 초) 문자열 결합 (117 밀리 초)
그런 다음 카운트를 500'000으로 늘 렸습니다. 이제 두 브라우저에서 문자열 연결보다 속도array.join()
가 느 렸습니다 . 문자열 연결은 Internet Explorer에서 937ms, Firefox에서 1155ms, Internet Explorer에서 배열 조인 1265, Firefox에서 1207ms였습니다.
Internet Explorer에서 "스크립트를 실행하는 데 시간이 너무 오래 걸리지"않고 테스트 할 수있는 최대 반복 횟수는 850,000입니다. 그런 다음 Internet Explorer는 문자열 연결의 경우 1593, 배열 결합의 경우 2046이었고 Firefox는 문자열 연결의 경우 2101, 배열 결합의 경우 2249입니다.
결과 -반복 횟수가 적은 경우 array.join()
Firefox에서 더 빠를 수 있으므로 사용을 시도 할 수 있습니다. 숫자가 증가하면 string1+string2
방법이 더 빠릅니다.
Internet Explorer 6 (Windows XP)에서 테스트를 수행했습니다. 프로세스가 100,000 회 이상 반복하여 테스트를 시도하면 프로세스가 즉시 응답하지 않고 종료되지 않았습니다. 40,000 회의 반복 결과
Time (strings): 59175 ms
Time (arrays): 220 ms
이는 Internet Explorer 6을 지원해야하는 array.join()
경우 문자열 연결보다 빠른 방법을 선택하십시오 .
join()
ECMAScript의 일부이며 모든 JavaScript 인터프리터가이를 구현합니다. 왜 "의존"합니까?
이 코드는 약간의 변경으로 원하는 경로처럼 보입니다.
append 메소드를 다음과 같이 변경하려고합니다. 숫자 0을 수락하도록 변경하고 this
추가하여 연결할 수 있도록 반환했습니다 .
StringBuilder.prototype.append = function (value) {
if (value || value === 0) {
this.strings.push(value);
}
return this;
}
null
, false
빈 문자열, undefined
또는 NaN
.
JavaScript의 ECMAScript 6 버전 (일명 ECMAScript 2015)에는 문자열 리터럴이 도입되었습니다 .
var classType = "stringbuilder";
var q = `Does JavaScript have a built-in ${classType} class?`;
작은 따옴표 대신 역 따옴표는 문자열을 묶습니다.
C #에서는 다음과 같은 작업을 수행 할 수 있습니다.
String.Format("hello {0}, your age is {1}.", "John", 29)
JavaScript에서는 다음과 같은 작업을 수행 할 수 있습니다
var x = "hello {0}, your age is {1}";
x = x.replace(/\{0\}/g, "John");
x = x.replace(/\{1\}/g, 29);
{0}
교체 된 문자열에 포함 된 경우 중단됩니다 {1}
.
관심있는 사람들을 위해 Array.join을 호출하는 대안이 있습니다.
var arrayOfStrings = ['foo', 'bar'];
var result = String.concat.apply(null, arrayOfStrings);
console.log(result);
예상대로 출력은 문자열 'foobar'입니다. Firefox에서이 방법은 Array.join보다 성능이 우수하지만 + 연결로 성능이 뛰어납니다. String.concat에서는 각 세그먼트를 별도의 인수로 지정해야하므로 호출자는 실행중인 JavaScript 엔진에 의해 부과되는 인수 수 제한에 의해 제한됩니다. 한 번 봐 가지고 Function.prototype.apply의 ()의 문서 자세한 내용입니다.
이 기능을 정의했습니다.
function format() {
var args = arguments;
if (args.length <= 1) {
return args;
}
var result = args[0];
for (var i = 1; i < args.length; i++) {
result = result.replace(new RegExp("\\{" + (i - 1) + "\\}", "g"), args[i]);
}
return result;
}
그리고 C #처럼 호출 할 수 있습니다 :
var text = format("hello {0}, your age is {1}.", "John", 29);
결과:
안녕하세요, 나이는 29 세입니다.
JavaScript에서 많은 문자열 연결을 수행하면 템플릿을 찾기 시작합니다. Handlebars.js는 HTML과 JavaScript를 더 읽기 쉽게 유지합니다. http://handlebarsjs.com
sys.StringBuilder()
다음 기사 를 사용해보십시오.