• 목록
  • 아래로
  • 위로
  • 0
  • 네모
  • 조회 수 1554

JavaScript에서 문자열을 결합할 때, 보통 아래와 같은 방법을 사용합니다.

 

var TEXT = "안녕하세요!"
TEXT += "여기는 세상입니다?";

 

그리고, 그 선택은 대부분 올바릅니다.

 

var TEXT = "";

for(var cnt = 0; cnt < 50; cnt++){
  TEXT += "안녕하세요!";
}

console.log(TEXT);

 

var ARR = [];

for(var cnt = 0; cnt < 50; cnt++){
  ARR.push("안녕하세요!");
}

console.log(ARR.join(""));

 

두개의 코드중에서 덧셈을 사용한 코드가 조금 더 빠릅니다.

제가 사용하는 PC에서는 덧셈이 65,520 Ops/sec 으로 61,453 Ops/sec 인 Join 보다 조금 더 성능이 좋습니다.

 

그러나, 이 선택이 언제나 올바른 것은 아닙니다.

 

var TEXT = "";

for(var cnt = 0; cnt < 1000; cnt++){
  TEXT += "안녕하세요!";
  TEXT += " ";
}

console.log(TEXT);

 

var TEXT = "";

for(var cnt = 0; cnt < 1000; cnt++){
  TEXT += "안녕하세요! ";
}

console.log(TEXT);

 

var ARR = [];

for(var cnt = 0; cnt < 1000; cnt++){
  ARR.push("안녕하세요!");
}

console.log(ARR.join(" "));

 

위 코드에서는 꽤 다른 성능을 보입니다.

 

첫번째 코드는 덧셈을 사용하면서, 각 문자열을 공백 하나로 구분합니다.

이 코드는 6,465 Ops/sec 으로 측정되었습니다.

공백과 문자열을 따로 결합하다 보니 연산횟수가 많아 그런것 같습니다.

 

두번째 코드는 문자열 뒤에 공백을 추가했습니다.

공백을 같이 처리해서 그런지 12,676 Ops/sec 으로 첫번째 코드보다는 성능이 좋습니다.

 

그런데, 세번째 코드는 두개의 코드들보다 더욱 성능이 좋습니다.

15,117 Ops/sec 으로, 세개의 코드 중에서 제일 좋은 성능을 보입니다.

 

테스트를 해 보고 싶으시다면

https://jsperf.com/ndev-js-plus-append-1 에서 확인해 볼 수 있습니다.

 

 

 

 

 

장문일 것을 예상하여 모든 결합을 Join으로 하기에는 무리가 있습니다.

오히려 속도가 느려질 가능성도 있습니다.

 

그렇다고 단문으로만 가정하여 덧셈 기호를 사용하는 것도 성능에 안좋은 영향이 있습니다.

 

문자열의 길이와 상황에 따라서 사용할 방식을 골라 사용하는 것이 제일 현명한 것 같습니다.

작성자
네모 71 Lv. (46%) 408590/414720EXP

인스타그램 : http://instg.me/nemo_9l

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 마스터 24.02.11.17:21 1053
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4731
54 MS Office 제품군 명칭 변경 image 이니스프리 이니스프리 20.07.02.18:05 116
53 MS Chromium 엣지 브라우저 Beta의 공식버전 발표 image 이니스프리 이니스프리 19.08.24.22:39 185
52 Matrix DAC 발열 문제 이니스프리 이니스프리 20.01.31.12:34 174
51 masonry 라이브러리 사용시 세로방향 이미지 겹침 문제에 대한 해결방법 이니스프리 이니스프리 19.07.20.23:39 1171
50 Lynx를 이용하여 특정 페이지를 주기적으로 방문하는 것을 Crontab에 넣는 방법 이니스프리 이니스프리 18.11.29.07:17 267
49 Linux에서 Screen 패키지를 사용하는 방법과 그 이유 6 image Seia Seia 19.02.20.03:28 360
48 KT 인터넷 오피스 IP 서비스 - 홈 서버용 고정 IP 제공 9 file 이니스프리 이니스프리 18.03.20.22:04 4692
47 JLPT 성적표 및 합격증 수령 주소 변경 이니스프리 이니스프리 20.01.29.21:51 163
46 JavaScript와 Canvas로 이미지의 배경값을 자동으로 산출하기 Seia Seia 20.09.12.06:37 290
JavaScript에서 문자열 결합 방식의 성능차이 네모 네모 17.11.17.23:01 1554
44 JavaScript에서 Array로 Multipul Evaluation을 사용하면서 어디에 오류가 발생했는지 확인하기 Seia Seia 18.10.21.14:47 152
43 IPVanish의 한국서버가 4개로 확충되었습니다. image 이니스프리 이니스프리 20.01.11.11:27 116
42 ionicons.com - 오픈 소스 아이콘 4 이니스프리 이니스프리 21.02.14.18:59 307
41 Instaloader / Instalooter 간단한 사용기 이니스프리 이니스프리 18.12.30.23:19 1018
40 HTTPS (SSL서버) 보안 점검해주는 사이트 4 블루블루 17.06.17.01:02 544
39 hosting.kr 개인정보 보호 서비스 image 이니스프리 이니스프리 21.09.20.10:46 212
38 HEIC to JPG 변환 이니스프리 이니스프리 19.08.29.22:37 1534
37 glob.glob()를 이용하여 recursive하게 하위 폴더까지 모든 파일과 디렉토리를 검색하기 이니스프리 이니스프리 20.08.12.16:22 1747
36 GitHub에서 학생계정 얻고 Private Repo 사용하기 5 Seia Seia 18.06.23.22:34 1239
35 GIF 파일의 용량을 줄여주는 사이트 - gifgifs.com image 이니스프리 이니스프리 17.10.09.12:57 17668