팁 & 노하우

|  분야 불문! 어떤 분야든지 자신이 알고 있는 팁이나 노하우를 남겨주세요.

조회 수 179 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

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으로 하기에는 무리가 있습니다.

오히려 속도가 느려질 가능성도 있습니다.

 

그렇다고 단문으로만 가정하여 덧셈 기호를 사용하는 것도 성능에 안좋은 영향이 있습니다.

 

문자열의 길이와 상황에 따라서 사용할 방식을 골라 사용하는 것이 제일 현명한 것 같습니다.

Who's 네모

profile

메인 카카오톡 ID : kanae98 (네모)

히키코모리 블로그 : https://ndevel.net

상품판매 사이트 : https://ndevel.com


서브컬쳐 카카오톡 ID : cyemo (세모)

아니메월드 : https://open.kakao.com/o/gA8MIx1


27시간 심심하므로 채팅은 언제나 환영! '25시부터 26시 사이에 채팅 상시 대기' 랜덤 추첨 진행중 - 당첨확률 50-10!%


팁 & 노하우

분야 불문! 어떤 분야든지 자신이 알고 있는 팁이나 노하우를 남겨주세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 앞으로 ssh 사용시 한글 사용이 가능합니다. 7 마스터 2018.10.12 12882
공지 접속 불가 사태 수습은 진행중입니다. 35 마스터 2018.10.05 13521
공지 회원 전용 페이지가 생겼습니다. 10 file 마스터 2018.03.20 14157
45 [건강/의학] 허리디스크,목디스크 혹은 허리,목아프신분들을 위한 팁. 2 file death 2017.01.25 483
44 [생활정보] 지진 발생시 상황별 대피 요령. death 2017.01.25 186
43 [건강/의학] 냄새 없애고 세균 죽이는 양치법. 1 file death 2017.01.25 210
42 [공연정보] 호세 카레라스 마지막 월드 투어 (내한공연 2017. 3. 4.) 이니스프리 2017.01.25 151
41 [생활정보] 교보문고 매월 22일~28일, e캐시 더블적립 3 이니스프리 2017.01.23 125
40 [생활정보] 기존 영역 벗어나 새로워진  편의점 크로스오버 상품 5 이니스프리 2017.01.23 121
39 [할인정보] KFC 스마트버켓2 14,800원 -> 9,900원 이니스프리 2017.01.23 150
38 [할인정보] 스와로브스키 50% 할인 file 이니스프리 2017.01.22 78
37 [할인정보] Kaspersky Antivirus 및 Total Security 40% 할인 이니스프리 2017.01.18 167
36 단기로 살 때 국내 사이트에서 도메인 사지 마세요. 2 JEEK_CODUCT 2017.01.17 147
35 [할인정보] 버거킹에서 현재 진행 중인 각종 이벤트! 이니스프리 2017.01.16 163
34 [이벤트정보] V3 모바일 시큐리티 설치 후 개인정보 클리너 실행시 오로나민 쿠폰 이니스프리 2017.01.16 244
33 [할인정보] 나뚜르 트리플컵 1+1 5 이니스프리 2017.01.15 264
32 미디어위키 속도 조금이라도 높이기 1 title: 은메달도다 2017.01.13 186
31 [뻘글]CloudFlare를 사용했을 때와 그렇지 않았을 때 속도 차이는 얼마나 날까? 3 file title: 금메달 (30일)동방개념지국 2017.01.13 990
30 하루에 포인트를 많이 쌓는 법 3 file title: 은메달도다 2017.01.12 211
29 [정보] 돈 되는, 탄소포인트제 1 file title: 은메달대전댁 2017.01.03 128
28 [할인정보] 더페이스샵 1월 멤버십데이 (오늘부터!) 1 이니스프리 2017.01.02 180
27 [할인정보] 노턴, 맥아피 안티바이러스 할인 2 이니스프리 2017.01.01 142
26 [이벤트정보] 스킨큐어 신년음악회 개최, 30명에게 티켓 쏜다 1 이니스프리 2017.01.01 236
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9
서버에 요청 중입니다. 잠시만 기다려 주십시오...