console.log와 성능
2025. 12. 3. 13:19ㆍ개발/fe
반응형
결론부터 말하면 console.log가 많아지면 정말로 느려진다.
하지만 이유는 DOM 크기 증가와는 완전히 다른 메커니즘
1. console.log가 많아지면 느려지는 이유
✔ 1) DevTools가 열려 있을 때 성능 급격히 저하
Chrome DevTools가 켜져 있으면, 로그를
UI에 렌더링해야 하기 때문에 매우 큰 비용이 든다.
- 로그 문자열 포맷팅
- 객체 Serialize
- Console 패널에 DOM 요소로 렌더링
- 과거 로그 저장 및 스크롤 처리
특히 루프 내부에서 매 프레임(console.log) 하면 FPS가 크게 떨어진다.
✔ 2) 로그가 많으면 JS 실행 자체도 늦어진다
console.log는 I/O 작업이다.
실제로 아래와 같은 작업을 수행한다:
- 문자열 변환
- 객체를 serialize (특히 깊은 객체일 경우 시간 증가)
- 브라우저의 로깅 시스템에 전달
- DevTools에서 렌더링(있는 경우)
→ 즉, JS 엔진이 pure 연산을 수행할 때보다 느려진다.
✔ 3) 비동기적이지만 완전히 free는 아니다
Chrome은 log 출력을 비동기 처리하지만
호출 자체는 비용이 있으므로 연산이 많은 루프에서는 속도 차이가 누적된다.
예시:
for (let i = 0; i < 1_000_000; i++) {
console.log(i);
}
→ 이건 사실상 브라우저를 멈추게 만든다.
2. DOM이 커질 때 느려지는 이유와 비교하면?
원인 DOM 성능 저하 console.log 성능 저하
| 스타일 계산/레이아웃 | 영향 있음 | 영향 없음 |
| 노드 수 증가 | 영향 큼 | 영향 없음 |
| JS 실행량 증가 | 간접적 영향 | 직접적 영향 |
| UI 렌더링 비용 | 적음 | DevTools 열림 시 매우 큼 |
| 성능 병목 위치 | Layout 엔진 | JS 엔진 + Console UI |
→ 둘 다 “렌더링 비용 증가 때문에 느려진다”는 점은 비슷하지만
루트 원인은 완전히 다르다.
3. 실무용 Best Practice (console.log 관련)
✔ 1) 프로덕션 환경에서는 반드시 로그 제거
webpack, Vite, SWC 등에서 아래 설정 필수:
drop_console: true
✔ 2) 루프/리렌더링 영역에서는 console.log 자제
특히 React에서 렌더마다 찍히는 log는 성능을 크게 떨어뜨린다.
✔ 3) 대량 로그는 batch해서 처리
예:
const buffer = [];
function debug(msg) {
buffer.push(msg);
if (buffer.length > 50) {
console.log(buffer.join("\n"));
buffer.length = 0;
}
}
✔ 4) logging 라이브러리 사용
- loglevel
- pino browser
등을 사용하면 serialize 비용이 대폭 줄어든다.
결론
console.log가 많아지면 느려지는 이유는
‘로그 출력 자체의 비용 + DevTools 렌더링 비용’ 때문이다.
그러나 결과적으로 FPS 하락, 이벤트 응답 지연, 렌더링 지연 같은
“느린 현상”은 DOM 크기 증가와 비슷하게 사용자에게 체감될 수 있다.
반응형
'개발 > fe' 카테고리의 다른 글
| mfe how (0) | 2025.12.18 |
|---|---|
| Turborepo 개념 정리 (0) | 2025.12.10 |
| 가상화의 기준 (0) | 2025.12.03 |
| AI 로 프런트 디자인 하는 방법 (0) | 2025.08.18 |
| "data-toggle" (0) | 2023.05.18 |