• 목록
  • 아래로
  • 위로
  • 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 973
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4653
431 [파이썬] 리스트 내 알파벳의 위치를 리스트로 반환하는 함수 5 이니스프리 이니스프리 20.05.05.20:56 1051
430 이제 Github에서 팀 Private 저장소가 무료! (GitHub is now free for teams) title: 은메달도다 20.04.16.02:10 1030
429 [Python] 파일명을 가져올 때 os.listdir vs glob.glob의 차이 5 이니스프리 이니스프리 20.04.08.20:49 1028
428 Instaloader / Instalooter 간단한 사용기 이니스프리 이니스프리 18.12.30.23:19 1016
427 [Python] 네이트 실시간 검색어 크롤링 1 이니스프리 이니스프리 21.03.22.20:16 1006
426 [Python] 폴더의 모든 파일명을 랜덤하게 변경하기 이니스프리 이니스프리 20.08.30.15:06 1006
425 [Python] 지난 일요일 날짜 구하기 이니스프리 이니스프리 20.02.04.20:33 997
424 텍스트 무료 로고 만들기 사이트 4 image 오후두시스토리 오후두시스토.. 17.04.05.16:56 965
423 [Openpyxl] 성명, 생년월일을 담은 리스트를 정렬하여 엑셀파일로 저장하는 함수 이니스프리 이니스프리 20.05.13.19:13 963
422 [Ubuntu/Python] Selenium에서 Headless browser의 설치 및 실행 이니스프리 이니스프리 18.10.09.23:54 956
421 [Requests] 한 번의 POST 전송으로 여러 개의 파일을 업로드하는 방법 이니스프리 이니스프리 20.02.06.21:23 947
420 [CMD] 어제 날짜를 구하는 Batch 파일 - VBS를 이용하되 별도의 VBS 파일을 두지 않는 방법 이니스프리 이니스프리 20.05.14.11:48 925
419 무료 크론탭 이용가능한사이트 1 슬기 슬기 18.10.06.10:08 925
418 [Windows] 날짜 및 시각을 폴더명으로 하는 백업 Batch 파일 - 파일 버저닝 용도 2 이니스프리 이니스프리 21.01.25.22:14 919
417 [Python] COS Pro 1급 6-3 풀이 이니스프리 이니스프리 20.02.15.20:14 919
416 ftp 폴더 삭제 안되고 느릴때 - eXtplorer 4 image djdisodo 18.02.22.12:32 894
415 윈도우 업데이트 후 화면밝기조절이 안 될 때의 해결방법 이니스프리 이니스프리 19.10.24.21:00 885
414 롯데 프리미엄 아울렛에서 롯데 지류 상품권의 사용 가능 여부 이니스프리 이니스프리 20.03.26.17:51 870
413 Owl Carousel에서 버전별 하단 dots를 없애는 방법 image 이니스프리 이니스프리 18.10.29.18:25 853
412 Windows 10 에서 Telnet 사용하기.. 1 image 여우나라 title: Fox여우나라 17.11.10.10:49 844