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

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. (80%) 412480/414720EXP

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

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 설 맞이 서버 업데이트 안내 6 마스터 마스터 26.02.16.21:37 13307
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 7 마스터 마스터 23.01.14.02:23 396009
552 경험치에 관련해서 문의가 많군요. 조금 정리해봤습니다. 10 마스터 마스터 16.09.16.22:59 1035
551 애드블록은 사용하시면 안됩니다! 6 image 에듀 title: 맛스타의 자물쇠에듀 16.09.18.19:56 1236
550 복권 긁지않고 내용물 확인하는 방법.. 5 title: 황금 서버 (30일)어코 16.09.19.13:08 1006
549 인증서 설치하신분들중 WoSign, StartSSL 인증서를 사용하시는분들은 봐주세요 3 YJSoft YJSoft 16.10.01.20:32 1060
548 .tk(freenom) 로 접속이 안되는 분들이 요즘 왕왕보이네요. 15 image 마스터 마스터 16.10.05.13:40 2657
547 멘션 설정을 해주세요. 1 image 에듀 title: 맛스타의 자물쇠에듀 16.12.01.20:47 894
546 게시글 이동시 포인트는 차감됩니다. 2 image 에듀 title: 맛스타의 자물쇠에듀 16.12.03.22:34 979
545 [롯데리아] 클래식 치즈버거 주문시 치즈스틱 무료 증정 이벤트 6 image 이니스프리 이니스프리 16.12.07.00:20 1017
544 특정사이트 접근제한 하는 방법 1 image title: 은메달t 16.12.09.21:13 1382
543 [생활정보] 12/5-12/11 7일간 와퍼 주니어 51% 할인 (1900원) 6 image 이니스프리 이니스프리 16.12.10.00:26 935
542 [생활정보] 동동주 베이스의 안동 찹쌀 소주가 출시되었습니다 7 image 이니스프리 이니스프리 16.12.13.12:57 1015
541 [펌] 자동차 월동준비 노하우 - 다들 미리미리 월동준비 하세요 ^^ 1 image 이니스프리 이니스프리 16.12.14.11:41 898
540 [정보] 생각보다 열량이 높은 음식 8가지.jpg 2 image 하루살이 title: 황금 서버 (30일)하루살이 16.12.17.12:36 980
539 [정보] 과제할 때 유용한 사이트 11선.jpg 2 image 하루살이 title: 황금 서버 (30일)하루살이 16.12.17.12:41 1019
538 [정보] 일상적인 물건들에 숨겨진 비밀 13가지.jpg image 하루살이 title: 황금 서버 (30일)하루살이 16.12.17.12:43 979
537 [할인정보] 버거킹 와퍼, 롱킹, 롱치킨버거 할인 (연말까지) image 이니스프리 이니스프리 16.12.19.10:45 853
536 [IT정보] Kaspersky Internet Security 40% 세일! 이니스프리 이니스프리 16.12.19.17:49 1000
535 [생활정보] 롯데리아 포켓몬 인형 이벤트! image 이니스프리 이니스프리 16.12.21.00:24 940
534 [생활정보] 굽네치킨 신메뉴 출시 - '갈비천왕' 1 이니스프리 이니스프리 16.12.22.14:44 934
533 [이벤트정보] 비타500 매주 10,000명 무료 제공 이벤트 1 image 이니스프리 이니스프리 16.12.23.23:47 650