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

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. (74%) 411830/414720EXP

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

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [중요공지] 추석 맞이 서버 업데이트 안내 5 마스터 마스터 25.10.09.02:20 78627
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 7 마스터 마스터 23.01.14.02:23 372082
552 일부 GIF 파일을 ImageMagick으로 처리 시 이미지가 깨지는 경우 해결법 image 제르엘 제르엘 25.05.18.02:25 1477
551 [Python] installing Geopandas in Windows (Trouble shooting) 1 이니스프리 이니스프리 24.10.25.20:10 1498
550 [Nextcloud] 프로세스가 kill 되는 문제에 관한 Troubleshooting 3 이니스프리 이니스프리 24.09.30.19:53 1802
549 [펌] Contabo VPS 관련 최근 정보글 image 이니스프리 이니스프리 24.09.29.21:11 1048
548 [Python] PDF 파일을 특정 페이지를 기준으로 두 개로 나누기 이니스프리 이니스프리 24.08.11.20:27 1681
547 [Python] Youtube API를 사용하지 않고 특정 채널의 모든 비디오 URL을 가져오기 이니스프리 이니스프리 24.06.09.22:12 1419
546 HDMI 단자의 QHD 출력을 정식으로 지원하지 않는 NVIDIA 그래픽 카드로 QHD 60 Hz 해상도 출력하기 2 image 제르엘 제르엘 24.06.09.17:45 2287
545 [Python] cannot import name 'TypeAliasType' from 'typing_extensions' 에러 대응방법 이니스프리 이니스프리 24.06.01.23:54 1151
544 [VSCode] 1개의 OS에 VSCode 여러 개를 설치 및 구동하기 이니스프리 이니스프리 24.05.26.05:09 1156
543 [Python] 리스트에 중복된 원소가 있는지 확인하는 함수 이니스프리 이니스프리 24.05.22.20:21 1289
542 [Python] random 함수가 계속하여 동일한 결과를 출력할 때 해결방법 이니스프리 이니스프리 24.05.15.19:32 1555
541 트래픽 절감 관련 모 커뮤니티 사이트의 회의 결과 이니스프리 이니스프리 24.05.15.16:51 1390
540 [Python] SSL: CERTIFICATE_VERIFY_FAILED에 대한 대처 방법 (2) 이니스프리 이니스프리 24.05.05.21:04 1340
539 [KT] 오피스넷 가정 설치 관련 이니스프리 이니스프리 24.05.05.00:28 1250
538 [Python] 쿠팡 크롤링할 때 소소한 팁 이니스프리 이니스프리 24.05.02.21:50 1184
537 [Python] dictionary 2개의 평균을 구하여 내림차순 정렬하기 이니스프리 이니스프리 24.04.21.17:29 1109
536 [Python] 독일어, 스페인어, 체코어 등 철자를 영문 알파벳으로 전환하기 이니스프리 이니스프리 24.04.21.17:15 1054
535 [Python] Tabulate 모듈로 작성한 테이블을 파일로 저장할 때 에러가 발생하는 경우 이니스프리 이니스프리 24.04.20.23:45 939
534 [Python] 변수의 이름을 반환하는 함수 이니스프리 이니스프리 24.04.20.23:29 1171
533 [Python] Table을 쉽게 만들어주는 모듈x2 이니스프리 이니스프리 24.04.18.22:04 829