스크립트 개발 중에 큰 문자열이 종종 특정 규칙에 따라 출력을 위해 큰 문자열로 결합되어 스 플라이 싱됩니다. 예를 들어, 스크립트 컨트롤을 작성할 때 전체 컨트롤의 모양을 제어하는 HTML 태그의 출력. 예를 들어, AJAX에서 서버 측 백 값을 얻은 후 HTML 태그를 동적으로 분석 할 때 여기서 스 플라이 싱 스트링의 특정 응용 프로그램에 대해서는 논의하지 않습니다. 스 플라이 싱 효율에 대해 논의하고 싶습니다.
코드를 작성하면 " +="연산자, s += string을 사용합니다. 이것은 가장 친숙한 글쓰기 방법입니다. 당신이 그것을 알아 차 렸는지 궁금합니다. 결합 된 문자열 용량이 수십 또는 수백 개의 k 인 경우 스크립트는 실행이 매우 느리고 CPU 사용률이 매우 높습니다.
코드 사본은 다음과 같습니다.
var str = "01234567891123456789212345678931234567894123456789";
str+= "51234567896123456789712345678981234567899123456789/n";
var result = "";
for (var i = 0; i <2000; i ++) 결과+= str;
단 한 단계에서 생성 된 결과 문자열은 200K이며 1.1 초가 소요되고 (컴퓨터 구성과 관련이 있음) CPU 피크는 100%입니다. (나는 그 효과를보다 직관적으로보기 위해 더 많은 루프를했다). 한 단계의 작동만으로 1 초 이상이 걸렸고 다른 코드에 소요 된 시간과 결합하면 전체 스크립트 블록의 실행 시간은 견딜 수 없습니다. 그렇다면 최적화 솔루션이 있습니까? 다른 방법이 있습니까? 물론 답이 있습니다. 그렇지 않으면이 기사를 작성하는 것이 넌센스가 될 것입니다.
더 빠른 방법은 배열을 사용하는 것입니다. 루프가 산란 될 때는 특정 문자열로 연결하는 것이 아니라 문자열을 배열에 넣고 마지막으로 Array.join ( "")을 사용하여 결과 문자열을 가져옵니다. Code example:
코드 사본은 다음과 같습니다.
var str = "01234567891123456789212345678931234567894123456789";
str+= "51234567896123456789712345678981234567899123456789/n";
var result = "", a = new Array ();
for (var i = 0; i <2000; i ++) a [i] = str;
결과 = a.join ( ""); a = null;
같은 크기의 문자열을 결합하는 데 걸리는 시간을 테스트하고 테스트 할 수 있습니다. 여기서 테스트 한 결과는 다음과 같습니다. <15 밀리 초. 단위는 밀리 초입니다. 즉, 그러한 200k 스트링을 결합하여 두 모드의 시간 소비는 약 2 배입니다. 그게 무슨 뜻입니까? 이것은 후자가 그의 일을 마치고 점심에서 돌아 왔으며, 전자는 여전히 쿨리로 일하고 있음을 의미합니다. 테스트 페이지를 작성하겠습니다. 다음 코드를 복사하여 HTM 파일로 저장하고 웹 페이지에서 열어 두 사람 간의 효율성 차이를 테스트 할 수 있습니다. 어쨌든, 나는 완료하는 데 30 분이 걸리는 전자를 테스트하고 있으며, 후자는 0.07 초 (10,000 루프)가 소요됩니다.
코드 사본은 다음과 같습니다.
<body>
문자열 스 플라이 싱 시간 수 <입력 id = "totle"value = "1000"size = "5"maxlength = "5">
<입력 유형 = "버튼"value = "문자열 스 플라이 싱 메소드"onclick = "method1 ()">
<input type = "button"value = "배열 할당 결합 메소드"onclick = "method2 ()"> <br>
<div id = "method1"> </div>
<div id = "method2"> </div>
<TextArea id = "show"> </textRea>
<script language = "javaScript">
<!-
// 스 플라이스트 된이 문자열의 길이는 100 바이트 author : meizz입니다.
var str = "01234567891123456789212345678931234567894123456789";
str+= "51234567896123456789712345678981234567899123456789/n";
// 메소드 1
기능 방법 1 ()
{
var result = "";
var totle = parseint (document.getElementById ( "totle"). value);
var n = 새 날짜 (). gettime ();
for (var i = 0; i <totle; i ++)
{
결과 += str;
}
document.getElementById ( "show"). value = result;
var s = "문자열 스 플라이 싱 방법 : 스 플라이 싱 된 큰 문자열은 길다"+ result.length+ "byte,"+
"분할 시간" + (new date (). gettime () -N) + "milliseconds!";
document.getElementById ( "method1"). innerHtml = s;
}
// 방법 2
기능 방법 2 ()
{
var result = "";
var totle = parseint (document.getElementById ( "totle"). value);
var n = 새 날짜 (). gettime ();
var a = 새로운 배열 ();
for (var i = 0; i <totle; i ++)
{
a [i] = str;
}
결과 = a.join ( ""); a = null;
document.getElementById ( "show"). value = result;
var s = "배열 할당 조인 메소드 : 스 플라이 싱 된 큰 문자열이 길다" + result.length + "byte," +
"분할 시간" + (new date (). gettime () -N) + "milliseconds!";
document.getElementById ( "method2"). innerHtml = s;
}
//->
</스크립트>
마지막으로, 나는 몇 가지 말을 더 말할 것입니다. 모든 문자열 스 플라이 싱 사용 배열이 향후 조인됩니까? 이것은 실제 요구에 따라 다릅니다. 배열 변수를 열기 때문에 여러 또는 k 레벨 바이트의 일반적인 조합에 배열 방법을 사용할 필요가 없습니다. 몇 개의 k 스트링 조합이 있으면 배열이 효율적임을 의미합니다.
IE 6.0 :
문자열 스 플라이 싱 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스 플라이 싱은 22,089 밀리 초가 걸립니다!
배열 할당 결합 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스플 라이스에 218 밀리 초가 걸립니다!
Firefox 1.0 :
문자열 스 플라이 싱 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스 플라이 싱은 1044 밀리 초가 걸립니다!
배열 할당 결합 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스 플라이 싱은 1044 밀리 초가 걸립니다!
모질라 1.7 :
문자열 스 플라이 싱 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스 플라이 싱은 1045 밀리 초가 걸립니다!
배열 할당 결합 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스 플라이 싱은 1044 밀리 초가 걸립니다!
Netscape 7.0 :
문자열 스 플라이 싱 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스 플라이 싱은 10,273 밀리 초가 걸립니다!
배열 할당 결합 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스플 라이스에 1138 밀리 초가 걸립니다!
오페라 7.54 :
문자열 스 플라이 싱 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스 플라이 싱은 6968 밀리 초가 걸립니다!
배열 할당 결합 방법 : 스 플라이 싱 된 큰 문자열의 길이는 1010,000 바이트이며 스 플라이 싱은 6922 밀리 초가 걸립니다!
10,000주기의 테스트 결과는 IE 및 Netscape에서 효율이 크게 향상 될 수 있음을 보여줍니다. Firefox Mozilla Opera에서는 두 가지 방법이 거의 동일합니다. 이 데이터는 배열 결합 방법이 기존 문자열 스 플라이 싱보다 우수하다고 판단하기에 충분할 수 있습니다.