• 목록
  • 아래로
  • 위로
  • 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 1073
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4760
154 [구루미] 지원 환경 6 이니스프리 이니스프리 20.05.25.22:27 692
153 [Python] 매시간 또는 매분 정각에 작동하는 스크립트 - time.sleep을 사용하지 않는 방법 3 이니스프리 이니스프리 20.05.26.18:09 2386
152 [Python] clint를 이용한 requests에서의 다운로드 프로그레스바 이니스프리 이니스프리 20.05.29.14:53 289
151 [PIL] 폴더의 전체 이미지 파일을 일괄적으로 crop하기 이니스프리 이니스프리 20.05.29.18:56 1457
150 [Python] tqdm과 enumerate를 함께 사용하기 이니스프리 이니스프리 20.05.29.19:07 16615
149 [Scipy] Wasserstein distance를 이용한 두 이미지 간 유사도 측정 1 이니스프리 이니스프리 20.05.29.19:36 1723
148 파이썬 3.7에서 pywinauto 설치시 에러가 발생하는 경우 이니스프리 이니스프리 20.05.30.00:50 482
147 [Python] PDF2Image 모듈 - PDF 파일을 이미지 파일로 변환 이니스프리 이니스프리 20.05.30.21:01 2772
146 database 백업 및 복원을 지원하는 site입니다. 해피보이 20.06.03.20:52 77
145 크롬 원격 데스크톱 조작법 2 이니스프리 이니스프리 20.06.03.23:03 5822
144 엑셀에서 한컴으로 복붙할 때 깨지는 경우에 대한 소소한 팁 image 이니스프리 이니스프리 20.06.08.20:35 370
143 사실상 일본산 제품인데 헷갈리는 브랜드 6 이니스프리 이니스프리 20.06.10.20:05 168
142 [Python] 3개의 list를 하나의 dictionary로 변환하기 이니스프리 이니스프리 20.06.10.21:47 114
141 [그누보드] "올바른 방법으로 이용해 주십시오." 에러 발생시 대처법 이니스프리 이니스프리 20.06.12.12:48 613
140 [펌] 하나의 키 입력으로 유튜브 광고 차단하기 - Block YouTube Ads With a Single Keystroke 2 이니스프리 이니스프리 20.06.14.10:19 157
139 [Python] OrderedDict에 대한 간단한 소개 3 이니스프리 이니스프리 20.06.16.13:09 163
138 [Python] 동적 변수 생성하기 3 이니스프리 이니스프리 20.06.16.14:49 774
137 [Python] 두 개의 변수를 하나의 for문에서 돌리기 - zip() 활용 이니스프리 이니스프리 20.06.16.14:53 272
136 색상선택 결정문제를 겪고 계신 분들 위한 사이트 OAUTH2 20.06.19.18:22 69
135 [Python] m3u8 파일의 목록에 있는 ts 파일들을 merge하는 방법 6 이니스프리 이니스프리 20.06.20.22:03 1355