스크립트 개발 과정에서 특정 규칙에 따라 큰 문자열이 결합되고 이어져 출력되는 경우가 많습니다. 예를 들어 스크립트 컨트롤을 작성할 때 전체 컨트롤의 모양을 제어하는 HTML 태그 출력이나 AJAX에서 서버 측 반환 값을 얻은 후 HTML 태그를 동적으로 분석하고 생성하는 경우이지만 구체적인 응용 프로그램에 대해서는 논의하지 않습니다. 여기서는 접합의 효율성에 대해 논의해 보겠습니다.
문자열 접합을 작성할 때 항상 "+=" 연산자인 s += String을 사용합니다. 이것은 가장 친숙한 작성 방법입니다. 수십, 심지어 수백 K이면 스크립트 실행이 매우 느리고 CPU 사용량이 매우 높습니다. 예:
var str = "01234567891123456789212345678931234567894123456789";
str+= "51234567896123456789712345678981234567899123456789n";
var 결과 = "";
for(var i=0; i<2000; i++) result += str;
단 한 단계에서 결과 문자열은 200K이고 1.1초가 소요되며(컴퓨터 구성과 관련됨) CPU 최고 값은 100입니다. %. (효과를 좀 더 직관적으로 확인하기 위해 루프를 몇 개 더 만들었습니다.) 이러한 작업 단계만으로도 내 시간이 1초 이상 소모될 것으로 예상됩니다. 여기에 다른 코드의 시간 소모까지 더해지면 전체 스크립트 블록의 실행 시간이 감당할 수 없을 정도로 커집니다. 최적화 솔루션이 있나요? 다른 방법이 있나요? 대답은 물론 '예'입니다. 그렇지 않으면 이 기사를 쓰는 것이 말도 안 되는 일이 될 것입니다.
더 빠른 방법은 배열을 사용하는 것입니다. 루프를 연결할 때 문자열로 연결하는 대신 문자열을 배열에 넣고 마지막으로 array.join("")을 사용하여 결과 문자열을 가져옵니다. :
var str = "01234567891123456789212345678931234567894123456789";
str+= "51234567896123456789712345678981234567899123456789n";
var 결과 = "", a = new Array();
for(var i=0; i<2000; i++) a[i] = str;
result = a.join(""); a = null;
여기서 테스트한 결과는 <15밀리초입니다. 이는 200K 스트링을 조립하는 데 두 모드의 시간 소모가 거의 두 자릿수라는 것을 의미합니다. 그게 무슨 뜻이야? 후자는 일을 마치고 점심을 먹고 돌아왔는데, 전자는 여전히 힘든 일을 하고 있다는 뜻이다. 테스트 페이지를 작성했습니다. 다음 코드를 복사하여 HTM 파일로 저장하고 웹 페이지에서 열어 둘 사이의 효율성 차이를 테스트할 수 있습니다. 어쨌든 제가 테스트한 것은 전자가 완료되는 데 30분이 걸린다는 것입니다. , 후자는 또는 0.07초 안에 완료할 수 있습니다(10,000회 반복).
<본문>
문자열 연결 수<input id="totle" value="1000" size="5" maxlength="5">
<input type="button" value="문자열 접합 방법" onclick="method1()">
<input type="button" value="배열 할당 조인 방법" onclick="method2()"><br>
<div id="method1"> </div>
<div id="method2"> </div>
<textarea id="show" style="너비: 100%; 높이: 400"></textarea>
<SCRIPT LANGUAGE="자바스크립트">
<!--
//이 이어진 문자열의 길이는 100바이트 작성자: meizz
var str = "01234567891123456789212345678931234567894123456789";
str+= "51234567896123456789712345678981234567899123456789n";
//방법 1
함수 메서드1()
{
var 결과 = "";
var totle =parseInt(document.getElementById("totle").value);
var n = new Date().getTime();
for(var i=0; i<totle; i++)
{
결과 += str;
}
document.getElementById("show").value = 결과;
var s = "문자열 접합 방법: 접합 후 큰 문자열의 길이"+ result.length +"bytes,"+
"접합에는 시간이 걸립니다." + (new Date().getTime()-n) + "밀리초!";
document.getElementById("method1").innerHTML = s;
}
//방법 2
함수 메소드2()
{
var 결과 = "";
var totle =parseInt(document.getElementById("totle").value);
var n = new Date().getTime();
var a = new Array();
for(var i=0; i<totle; i++)
{
a[i] = str;
}
결과 = a.join(""); a=null;
document.getElementById("show").value = 결과;
var s = "배열 할당 조인 방법: 접합 후 큰 문자열의 길이"+ result.length +"bytes,"+
"접합에는 시간이 걸립니다." + (new Date().getTime()-n) + "밀리초!";
document.getElementById("method2").innerHTML = s;
}
//-->
</SCRIPT>
마지막으로 몇 마디만 말씀드리겠습니다. 앞으로 문자열 접합에 배열 조인이 사용됩니까? 이는 실제 요구 사항에 따라 다릅니다. 몇 개 또는 K 수준 바이트의 일반적인 조합의 경우 배열 변수를 여는 데 비용이 많이 들기 때문에 배열 방법을 사용할 필요가 없습니다. K개 이상의 문자열 조합이 있으면 배열의 효율성이 높다.
------------------------------------- ----------
IE 6.0:
문자열 접합 방법: 접합된 대형 문자열의 길이는 1,010,000바이트이고 접합에는 22,089밀리초가 소요됩니다!
배열 할당 조인 방법: 스플라이싱된 대형 문자열의 길이는 1,010,000바이트이고 스플라이싱에는 218밀리초가 걸립니다!
파이어폭스 1.0:
문자열 접합 방법: 접합된 대형 문자열의 길이는 1,010,000바이트이고, 접합에는 1,044밀리초가 소요됩니다!
배열 할당 조인 방법: 스플라이싱된 대형 문자열의 길이는 1,010,000바이트이고 스플라이싱에는 1,044밀리초가 걸립니다!
모질라 1.7:
문자열 접합 방법: 접합된 대형 문자열의 길이는 1,010,000바이트이고 접합에는 1,045밀리초가 소요됩니다!
배열 할당 조인 방법: 스플라이싱된 대형 문자열의 길이는 1,010,000바이트이고 스플라이싱에는 1,044밀리초가 걸립니다!
넷스케이프 7.0:
문자열 접합 방법: 접합된 대형 문자열의 길이는 1,010,000바이트이고 접합에는 10,273밀리초가 소요됩니다!
배열 할당 조인 방법: 스플라이싱된 대형 문자열의 길이는 1,010,000바이트이고 스플라이싱에는 1,138밀리초가 걸립니다!
오페라 7.54:
문자열 접합 방법: 접합된 대형 문자열의 길이는 1,010,000바이트이고 접합에는 6,968밀리초가 소요됩니다!
배열 할당 조인 방법: 스플라이싱된 대형 문자열의 길이는 1010000바이트이고 스플라이싱에는 6922밀리초가 걸립니다!
10,000번 반복한 테스트 결과는 IE와 Netscape에서 효율성이 크게 향상될 수 있음을 보여주는 반면, Firefox Mozilla Opera에서는 두 방법의 시간 소모가 기본적으로 비슷합니다. 이러한 데이터는 배열 조인 방법이 더 낫다는 것을 판단하기에 충분합니다. 전통적인 스트링 스플라이싱.