JavaScript 에서 StringBuilder 를 사용해 보자

2024. 8. 29. 22:53·Web/JS & jQuery

\

 

# JavaScript에서 문자열 성능과 메모리 효율성을 최적화하는 방법

JavaScript에서는 StringBuilder와 같은 전용 클래스는 없지만, 성능과 메모리 효율성을 향상시키는 방법이 있습니다.

1. 성능 개선

문자열을 자주 수정하거나 연결해야 할 때, 기존 문자열을 매번 복사하고 새로운 객체를 생성하는 것은 성능에 부담이 됩니다. 이 문제는 배열에 각 문자열을 저장한 후, join 메서드를 사용해 최종 문자열을 생성하는 방식으로 해결할 수 있습니다. 이를 통해 불필요한 메모리 할당을 줄이고, CPU 리소스를 절약할 수 있습니다.

2. 메모리 효율성

C#이나 Java의 StringBuilder처럼, JavaScript에서도 메모리 효율성을 고려해야 합니다. 문자열 조작이 많을 경우, 배열을 사용해 부분 문자열을 저장하고, 마지막에 join을 사용해 결합하는 방식은 메모리 사용량을 최적화하는 데 유리합니다.

이 방법을 통해 JavaScript에서도 성능과 메모리를 효율적으로 관리할 수 있습니다.

 

 

위와 같은 내용이지만.

C# 을 기준으로 문자열 += 과 StringBuilder 로 작성된 문자 객체(char[]) 를 탐색했을 때 성능차이가 상당히 많이 났었으며
장문의 문자열 일수록 그 속도의 체감은 심했던 것으로 기억함

 

- 문자열 연결에 대한 성능에 관련하여 참고할 만한 포스트  :

https://www.freecodecamp.org/news/efficient-string-building-in-javascript/

 

# 코드 샘플 


1. 문자열 더하기
 - 문자열 + 가 적을 경우에는 이 방법이 간단해서 좋을 수 있음
 - 요즘 PC들이 좋아서 성능을 깊게 생각 안하는 경향이 있지만.. 객체가 생성되고 버려지고의 반복
 - 우선 코드가 어질어질함

var url = 'http://www.dog.food'  
var querySting = '?&food1=' + '깡통사료' + '&food2=' + '개밥그릇' + '&food3=' + '통조림' + '&food4=' + '로얄캐닌';
var pathQuery = url + querySting;

 

2. StringBuider 를 흉내낸 배열

 - StringBuilder 가 없는 자바스크립트에서 대체 사용 방법

            var html = [];
            html.push("http://www.dog.food",
                    "?&food=" ,
                    "깡통사료" ,
                    "&food2=" ,
                    "개밥그릇" ,
                    "&food3=" ,
                    "통조림" ,
                    "&food4=" ,
                    "로얄캐닌");
            
            alert(html.join(""));

 

 

3. 위 2번 String을 메소드화 
 - 이렇게 해두면 단순히 c#이나 java 같아서 가독성이 좋다.
 - 공통 JS 파일에 넣어두고 쓰기 좋음
 - 구글검색에서 긁어온 건데.. 
 - https://www.codeproject.com/Articles/12375/JavaScript-StringBuilder

 

- 아래 코드를 jsfiddle 의 html 영역에 복사하고 run 버튼을 클릭하여 테스트 할 수 있습니다.
 https://jsfiddle.net/

<!DOCTYPE html>
<html lang="ko">
<head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>    
    <script>
        // [시작] 공용함수로 빼둔다
        function StringBuilder(value) {
            this.strings = new Array();
            this.append(value);
        }

        StringBuilder.prototype.append = function (value) {
            if (value) {
                this.strings.push(value);
            }
        }

        StringBuilder.prototype.clear = function () {
            this.strings.length = 0;
        }

        StringBuilder.prototype.toString = function () {
            return this.strings.join("");
        }
		// [종료] 공용함수로 빼둔다

        $(function() {         
            
            // 실행예시
            var sb = new StringBuilder();
            sb.append("http://www.dog.food");
            sb.append("?&food=");
            sb.append("깡통사료");  
            sb.append("&food2=");  
            sb.append("개밥그릇");  
            sb.append("&food3=");  
            sb.append("통조림");  
            sb.append("&food4=");  
            sb.append("로얄캐닌");

            alert(sb.toString());
         
        });
    </script>
</head>
<body></body>
</html>

 

'Web > JS & jQuery' 카테고리의 다른 글

유효성 검사  (1) 2024.09.03
jQuery-Confirm 플러그인  (1) 2024.09.01
String.Format, String.IsNullOrEmpty, String.IsNullOrWhiteSpace  (0) 2024.08.30
FAKE Ajax JSON 데이터가 필요할 때 jsonplaceholder  (0) 2024.08.30
jQuery Templates plugin  (1) 2024.08.29
'Web/JS & jQuery' 카테고리의 다른 글
  • jQuery-Confirm 플러그인
  • String.Format, String.IsNullOrEmpty, String.IsNullOrWhiteSpace
  • FAKE Ajax JSON 데이터가 필요할 때 jsonplaceholder
  • jQuery Templates plugin
iyak
iyak
자료 정리
  • iyak
    iyak
    나의 정리 공간

    post | manage
  • 전체
    오늘
    어제
    • 분류 전체보기 (25)
      • C#.NET (7)
        • C# (5)
        • ASP.NET (1)
        • WinForm (0)
        • 설정 (1)
      • JAVA,Spring (0)
        • Spring (0)
      • DB (9)
        • SQLServer (9)
        • MySQL & MaridDB (0)
      • Web (8)
        • JS & jQuery (7)
        • Web개발 관련사이트 (1)
      • 기타 (1)
        • 프로그램 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
iyak
JavaScript 에서 StringBuilder 를 사용해 보자
상단으로

티스토리툴바