• 목록
  • 아래로
  • 위로
  • 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 1127
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4815
514 파이썬에서 실행한 결과를 PHP에서 받는 방법 이니스프리 이니스프리 19.08.21.21:25 2886
513 파이썬에서 리스트의 문자열들이 특정 문자열 안에 포함되어 있는지 확인하는 방법 1 이니스프리 이니스프리 19.11.10.02:34 2885
512 [Python] 원하는 URL로 크롬 창 열기 이니스프리 이니스프리 20.07.16.14:01 2830
511 [Python] ImportError: No module named '_curses' 에러에 대한 대처 방법 이니스프리 이니스프리 21.09.19.21:44 2825
510 [Python] 확장자 확인 및 변경 이니스프리 이니스프리 20.08.23.12:17 2781
509 [Python] PDF2Image 모듈 - PDF 파일을 이미지 파일로 변환 이니스프리 이니스프리 20.05.30.21:01 2772
508 [Selenium] 다운로드받은 파일명 변경 이니스프리 이니스프리 20.01.03.12:47 2735
507 [파이썬] beep음 재생하기 (윈도우/맥/리눅스) 이니스프리 이니스프리 20.06.27.18:43 2706
506 [Python] PDF2image 모듈이 실행되지 않을 때 이니스프리 이니스프리 21.06.23.20:36 2690
505 Selenium에서 파일 업로드할 때 파일을 선택하는 방법 이니스프리 이니스프리 19.07.02.23:45 2630
504 [Python] 특정시간까지 대기하기 1 이니스프리 이니스프리 20.03.06.22:28 2503
503 Autohotkey 내장변수 정리 - 62개 이니스프리 이니스프리 18.10.04.16:48 2500
502 [Python] 스크린 캡쳐하는 모듈 이니스프리 이니스프리 20.05.25.21:30 2423
501 [Python] 매시간 또는 매분 정각에 작동하는 스크립트 - time.sleep을 사용하지 않는 방법 3 이니스프리 이니스프리 20.05.26.18:09 2386
500 크롬에서 방향키가 작동하지 않는 경우 해결책 1 이니스프리 이니스프리 19.03.31.11:56 2366
499 [파이썬] Selenium 쿠키를 Requests에서 불러오는 방법 이니스프리 이니스프리 19.11.10.15:13 2359
498 [우분투/파이썬] pip로 pytesseract를 설치 후 not installed or not in your path 메세지에 대한 대처방법 이니스프리 이니스프리 18.11.12.20:05 2186
497 각 카드사별 해외이용 정지방법(2018.04.06) 4 image 자뻑보이 자뻑보이 18.05.28.19:04 2172
496 변압기 소음을 줄이는 방법 6 이니스프리 이니스프리 19.01.27.12:27 2159
495 [파이썬] 리스트에서 중복되는 요소가 있는지 여부 판단 / 중복되는 요소만 뽑아서 리스트에 넣기 이니스프리 이니스프리 19.12.08.15:17 2156