>  기사  >  웹 프론트엔드  >  자바스크립트 조합과 문자열 연결_javascript 기술의 효율성 비교 테스트

자바스크립트 조합과 문자열 연결_javascript 기술의 효율성 비교 테스트

WBOY
WBOY원래의
2016-05-16 16:32:041413검색

스크립트 개발 과정에서 특정 규칙에 따라 큰 문자열을 결합하고 이어붙여 출력하는 경우가 많습니다. 예를 들어 스크립트 컨트롤을 작성할 때 전체 컨트롤의 모양을 제어하는 ​​HTML 태그 출력이나 AJAX에서 서버 측 반환 값을 얻은 후 HTML 태그를 동적으로 분석하고 생성하는 경우이지만 구체적인 응용 프로그램에 대해서는 논의하지 않습니다. 여기서는 접합의 효율성에 대해 논의해 보겠습니다.

우리는 코드를 작성할 때 항상 "=" 연산자를 사용합니다. s = String 이것은 결합된 문자열의 용량이 다음과 같다는 것을 눈치채셨는지 모르겠습니다. 수십 K 또는 심지어 수백 K가 있는 경우 스크립트 실행이 매우 느리고 CPU 사용량이 극도로 높습니다. 예를 들면 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

var str = "01234567891123456789212345678931234567894123456789";
          str = "51234567896123456789712345678981234567899123456789/n";
var 결과 = "";
for(var i=0; i

이 한 단계 작업으로 결과 문자열은 200K이고, 1.1초가 걸리며(컴퓨터 구성과 관련됨), CPU 최고 값은 100%입니다. (효과를 좀 더 직관적으로 확인하기 위해 루프를 몇 개 더 만들었습니다.) 이러한 작업 단계만으로도 내 시간이 1초 이상 소모될 것으로 예상됩니다. 여기에 다른 코드의 시간 소모까지 더해지면 전체 스크립트 블록의 실행 시간이 감당할 수 없을 정도로 커집니다. 최적화 솔루션이 있나요? 다른 방법이 있나요? 대답은 물론 '예'입니다. 그렇지 않으면 이 기사를 쓰는 것이 말도 안 되는 일이 될 것입니다.

더 빠른 방법은 배열을 사용하는 것입니다. 루프를 연결할 때 문자열로 연결되지 않고, 대신 문자열을 배열에 넣고 마지막으로 array.join("")을 사용하여 결과 문자열, 코드 예:

코드 복사 코드는 다음과 같습니다.

var str = "01234567891123456789212345678931234567894123456789";
          str = "51234567896123456789712345678981234567899123456789/n";
var 결과 = "", a = new Array();
for(var i=0; i<2000; i ) a[i] = str;
결과 = a.join(""); a = null;

동일한 크기의 문자열을 조립하는 데 걸리는 시간을 테스트할 수 있습니다. 여기서 테스트한 결과는 <15밀리초입니다. 단위는 밀리초이므로 이러한 문자열을 조립하는 것이 가능하다는 의미입니다. 200K 문자열의 경우 두 모드의 시간 소모는 거의 두 자릿수입니다. 그게 무슨 뜻이야? 후자는 일을 마치고 점심을 먹고 돌아왔는데, 전자는 여전히 힘든 일을 하고 있다는 뜻이다. 테스트 페이지를 작성했습니다. 다음 코드를 복사하여 HTM 파일로 저장하고 웹 페이지에서 열어 둘 사이의 효율성 차이를 테스트할 수 있습니다. 어쨌든 제가 테스트한 것은 전자가 완료되는 데 30분이 걸린다는 것입니다. 또는 0.07초(10,000회 반복)에 완료할 수도 있습니다.

코드 복사 코드는 다음과 같습니다.

<본문>
문자열 연결 개수