• 목록
  • 아래로
  • 위로
  • 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 1043
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4711
434 [Flutter 오프라인 강좌] 네이티브(Android, iOS) 앱개발자를 위한 Flutter 정복 image 이니스프리 이니스프리 19.10.15.01:32 183
433 MS Chromium 엣지 브라우저 Beta의 공식버전 발표 image 이니스프리 이니스프리 19.08.24.22:39 185
432 [학습정보] 구글 게이밍 아카데미 2/18 9 image 이니스프리 이니스프리 19.02.05.16:38 188
431 [끝말잇기] '슘'으로 시작되는 단어 중 XE타운에서 사용할 수 있는 단어 이니스프리 이니스프리 19.08.25.01:01 190
430 [Telegram] Bot의 inline keyboard 제거 이니스프리 이니스프리 22.07.01.20:35 190
429 [디지털 포렌식 전문가] 제21회 실기 시험 일정 image 이니스프리 이니스프리 23.10.29.01:39 191
428 Bose Sleepbuds의 사용 환경 등에 관하여 이니스프리 이니스프리 18.12.31.14:01 192
427 엠팍에서 첨부 이미지 크롤링을 할 때 400대 에러가 뜨는 경우 이니스프리 이니스프리 20.01.12.23:38 192
426 [파이썬] 딕셔너리의 키/값으로 정렬하기 이니스프리 이니스프리 20.02.02.23:25 195
425 [Python] dictionary 2개의 평균을 구하여 내림차순 정렬하기 이니스프리 이니스프리 24.04.21.17:29 196
424 [생활정보] 기존 영역 벗어나 새로워진  편의점 크로스오버 상품 5 image 이니스프리 이니스프리 17.01.23.16:24 197
423 [할인정보] 바디샵 3+3 $50 이상 브리티쉬로즈 증정 image 이니스프리 이니스프리 17.02.17.22:16 197
422 [Python] Bypassing Cloudflare's anti-bot page with Cloudscraper module 이니스프리 이니스프리 22.06.10.22:11 197
421 [Python] 윈도우에서 파이썬이 설치된 경로를 확인하는 방법 이니스프리 이니스프리 20.05.13.22:13 198
420 [할인정보] DHC - 2/15-2/16 스베스베 데이 전품목 30% SALE! 4 image 이니스프리 이니스프리 17.02.15.21:41 199
419 [Python] dictionary 자료형에서 setdefault와 update의 차이 이니스프리 이니스프리 20.04.05.18:12 199
418 [이벤트] 롯데리아 행쇼팩 9900원과 핫크리스피버거 1+1 image 부루마블 17.01.25.23:05 200
417 파이썬 & 데이터 분석 & 웹 크롤링 오프라인 강의 image 이니스프리 이니스프리 19.11.03.01:41 200
416 [Python] Ordered Set 이니스프리 이니스프리 23.09.19.20:24 200
415 [Python] 네이버 블로그 크롤링할 때 PostList.nhn 관련 팁 (문자열에서 첫번째 행을 제거하기) 이니스프리 이니스프리 20.11.08.18:16 202