⚡ Bolt: 뷰어 쉘 HTML 렌더링 성능 최적화#163
Conversation
뷰어 컨트롤러에서 HTML을 렌더링할 때 크기가 큰 텍스트 템플릿에 여러 번의 `.replace()` 호출을 체이닝하는 방식을 사용했습니다. 이는 매 `.replace()` 호출마다 전체 문자열 길이만큼 새로운 문자열 객체를 할당하여 가비지 컬렉터와 성능에 악영향을 미칩니다. 정적 템플릿 부분들을 `static final` 상수로 분리하고 문자열 연결(concatenation) 방식으로 변경함으로써, `StringConcatFactory`를 통해 동적 객체 할당량을 크게 줄이고 렌더링 성능을 개선했습니다.
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
뷰어 컨트롤러에서 HTML을 렌더링할 때 크기가 큰 텍스트 템플릿에 여러 번의 `.replace()` 호출을 체이닝하는 방식을 사용했습니다. 이는 매 `.replace()` 호출마다 전체 문자열 길이만큼 새로운 문자열 객체를 할당하여 가비지 컬렉터와 성능에 악영향을 미칩니다. 정적 템플릿 부분들을 `static final` 상수로 분리하고 문자열 연결(concatenation) 방식으로 변경함으로써, `StringConcatFactory`를 통해 동적 객체 할당량을 크게 줄이고 렌더링 성능을 개선했습니다.
뷰어 컨트롤러에서 HTML을 렌더링할 때 크기가 큰 텍스트 템플릿에 여러 번의 `.replace()` 호출을 체이닝하는 방식을 사용했습니다. 이는 매 `.replace()` 호출마다 전체 문자열 길이만큼 새로운 문자열 객체를 할당하여 가비지 컬렉터와 성능에 악영향을 미칩니다. 정적 템플릿 부분들을 `static final` 상수로 분리하고 문자열 연결(concatenation) 방식으로 변경함으로써, `StringConcatFactory`를 통해 동적 객체 할당량을 크게 줄이고 렌더링 성능을 개선했습니다.
뷰어 컨트롤러에서 HTML을 렌더링할 때 크기가 큰 텍스트 템플릿에 여러 번의 `.replace()` 호출을 체이닝하는 방식을 사용했습니다. 이는 매 `.replace()` 호출마다 전체 문자열 길이만큼 새로운 문자열 객체를 할당하여 가비지 컬렉터와 성능에 악영향을 미칩니다. 정적 템플릿 부분들을 `static final` 상수로 분리하고 문자열 연결(concatenation) 방식으로 변경함으로써, `StringConcatFactory`를 통해 동적 객체 할당량을 크게 줄이고 렌더링 성능을 개선했습니다.
💡 What:
ViewerUiController에서 초기 뷰어 쉘 HTML을 생성할 때 사용되던 연속된.replace()메서드 체이닝 방식을 제거하고, 큰 템플릿 문자열을 여러 개의static final상수로 분리한 뒤 문자열 연결(+)을 사용하여 조합하도록 변경했습니다.🎯 Why:
String.replace는 호출될 때마다 해당 크기의 새로운 문자열을 내부적으로 할당하게 됩니다. 2~3KB 크기의 HTML 블록에 3개의 변수 바인딩을 위해 3번의.replace()체이닝을 수행할 경우, 매 요청마다 불필요하게 3번의 큰 문자열 인스턴스화가 일어납니다. 이는 잦은 가비지 컬렉션(GC)을 유발하고 요청 처리 속도를 저하시킵니다.📊 Impact:
StringConcatFactory기반의 효율적 메모리 버퍼 생성으로 CPU 사용량 감소 및 응답 속도가 향상됩니다.🔬 Measurement:
mvn test및mvn -DskipTests checkstyle:check를 실행하여 렌더링 결과물의 무결성과 코드 컨벤션 위반이 없음을 검증했습니다.PR created automatically by Jules for task 14882730092773016553 started by @seonghobae