학습
JavaScript 성능 최적화 기법
JavaScript 성능 최적화 기법 — 고급
성능 최적화 기법
1. 도입 (왜 배워야 하는가)
성능 최적화는 웹 애플리케이션의 사용자 경험을 향상시키고, 서버 비용을 절감하며, 검색 엔진 최적화(SEO)에 긍정적인 영향을 미치는 필수적인 과정입니다. 사용자가 웹사이트를 사용할 때 느끼는 지연 시간이나 로딩 속도는 그들의 만족도와 직결되며, 이는 곧 이탈률과 매출에 영향을 미칠 수 있습니다.
만약 성능 최적화를 무시한다면, 페이지 로딩 시간이 길어져 사용자들이 사이트를 포기하게 만들거나, 서버가 과부하되어 다운되는 사태가 발생할 수 있습니다. 이러한 문제는 특히 트래픽이 많은 쇼핑몰이나 포털 사이트에서 더욱 두드러지게 나타납니다.
2. 핵심 개념 설명
2.1 비동기 프로그래밍 (Asynchronous Programming)
비동기 프로그래밍은 코드가 실행되는 순서를 조정하여, 긴 작업이 완료될 때까지 다른 작업을 수행할 수 있게 합니다. 이는 마치 요리를 하면서 다른 요리를 동시에 준비하는 것과 같습니다. 한 가지 요리가 끓는 동안 다른 재료를 준비하는 것이죠.
2.2 메모리 관리 (Memory Management)
메모리 관리는 프로그램이 사용하는 메모리를 효율적으로 관리하는 것입니다. 비유하자면, 집에서 물건을 잘 정리하여 필요한 것을 쉽게 찾을 수 있도록 하는 것과 같습니다. 불필요한 메모리를 할당하면, 프로그램이 느려질 수 있습니다.
2.3 코드 스플리팅 (Code Splitting)
코드 스플리팅은 애플리케이션의 코드를 여러 개의 청크로 나누어서 필요한 것만 불러오는 기법입니다. 이는 마치 여행할 때 필요한 짐만 챙기고, 나중에 필요할 짐은 따로 챙기는 것과 비슷합니다.
| 용어 | 정의 |
|---|---|
| 비동기 프로그래밍 | 코드 실행 순서를 조정하여 동시에 여러 작업 수행 |
| 메모리 관리 | 프로그램의 메모리 사용을 효율적으로 조절 |
| 코드 스플리팅 | 코드를 여러 청크로 나누어 필요한 것만 로드 |
3. 기본 코드 예제
비동기 프로그래밍 예제
console.log("시작");
setTimeout(() => {
console.log("비동기 작업 완료");
}, 2000);
console.log("끝");
- 실행 결과:
시작
끝
비동기 작업 완료
- console.log("시작"): "시작"을 출력합니다.
- setTimeout(...): 2초 후에 "비동기 작업 완료"를 출력하는 비동기 작업을 예약합니다.
- console.log("끝"): "끝"을 출력합니다. 비동기 작업이 완료되기 전에 실행됩니다.
4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니 구현
async function fetchCartItems() {
const response = await fetch('/api/cart');
const items = await response.json();
console.log(items);
}
fetchCartItems();
예제 2: 코드 스플리팅
import(/ webpackChunkName: "lodash" / 'lodash').then(_ => {
console.log(_.join(['Hello', 'world'], ' '));
});
5. 흔한 실수와 주의사항
실수 1: 비동기 코드의 순서
잘못된 코드
async function fetchData() {
const data = fetch('/api/data');
console.log(data); // Promise 출력
}
올바른 코드
async function fetchData() {
const response = await fetch('/api/data');
const data = await response.json();
console.log(data); // 실제 데이터 출력
}
실수 2: 메모리 누수
잘못된 코드
function createElement() {
const element = document.createElement('div');
document.body.appendChild(element);
// element를 가리키는 참조가 없으므로 메모리 해제 안 됨
}
올바른 코드
function createElement() {
const element = document.createElement('div');
document.body.appendChild(element);
// 필요할 때 element를 제거하여 메모리 해제
element.remove();
}