누구나 기다리는 것을 싫어합니다. 로드 시간이 3초를 넘으면 사용자의 50% 이상이 웹사이트를 이탈합니다.
대규모 JavaScript 페이로드를 전송하면 사이트 속도에 큰 영향을 미칩니다. 애플리케이션의 첫 번째 페이지가 로드되는 즉시 모든 JavaScript를 사용자에게 전송하는 대신 번들을 여러 부분으로 분할하고 처음에는 필요한 항목만 전송하세요.
코드 분할이 유용한 이유는 무엇인가요?
코드 분할은 시작 시간을 최소화하기 위한 기법입니다. 시작 시 JavaScript를 적게 전송하면 이 중요한 기간 동안 기본 스레드 작업을 최소화하여 애플리케이션이 더 빠르게 상호작용할 수 있습니다.
Core Web Vitals의 경우 시작 시 다운로드되는 JavaScript 페이로드를 줄이면 다음 페인트에 대한 상호작용 (INP) 시간이 개선됩니다. 이렇게 하면 기본 스레드가 해제되어 애플리케이션이 JavaScript 파싱, 컴파일, 실행 관련 시작 비용을 줄여 사용자 입력에 더 빠르게 응답할 수 있습니다.
웹사이트의 아키텍처, 특히 웹사이트가 클라이언트 측 렌더링에 크게 의존하는 경우 마크업 렌더링을 담당하는 JavaScript 페이로드의 크기를 줄이면 최대 콘텐츠 페인트 (LCP) 시간이 개선될 수 있습니다. 이는 클라이언트 측 마크업이 완료될 때까지 LCP 리소스가 브라우저에서 검색되는 것이 지연되거나 기본 스레드가 너무 바빠서 해당 LCP 요소를 렌더링할 수 없는 경우에 발생할 수 있습니다. 두 시나리오 모두 페이지의 LCP 시간을 지연시킬 수 있습니다.
측정
페이지에서 모든 JavaScript를 실행하는 데 상당한 시간이 걸리면 Lighthouse에 실패한 감사로 표시됩니다.

사용자가 애플리케이션을 로드할 때 초기 경로에 필요한 코드만 전송하도록 JavaScript 번들을 분할합니다. 이렇게 하면 파싱되고 컴파일되어야 하는 스크립트 양이 최소화되어 페이지 로드 시간이 빨라집니다.
webpack, Parcel, Rollup과 같은 인기 모듈 번들러를 사용하면 동적 가져오기를 사용하여 번들을 분할할 수 있습니다.
예를 들어 양식이 제출될 때 실행되는 someFunction 메서드의 예를 보여주는 다음 코드 스니펫을 살펴보세요.
import moduleA from "library";
form.addEventListener("submit", e => {
e.preventDefault();
someFunction();
});
const someFunction = () => {
// uses moduleA
}
여기서 someFunction는 특정 라이브러리에서 가져온 모듈을 사용합니다. 이 모듈이 다른 곳에서 사용되지 않는 경우 사용자가 양식을 제출할 때만 가져오도록 동적 가져오기를 사용하도록 코드 블록을 수정할 수 있습니다.
form.addEventListener("submit", e => {
e.preventDefault();
import('library.moduleA')
.then(module => module.default) // using the default export
.then(() => someFunction())
.catch(handleError());
});
const someFunction = () => {
// uses moduleA
}
모듈을 구성하는 코드는 초기 번들에 포함되지 않으며 이제 지연 로드되거나 양식 제출 후 필요할 때만 사용자에게 제공됩니다. 페이지 성능을 더욱 개선하려면 중요한 청크를 미리 로드하여 우선순위를 지정하고 더 빨리 가져오세요.
이전 코드 스니펫은 간단한 예이지만 서드 파티 종속 항목의 지연 로드는 대규모 애플리케이션에서 일반적인 패턴이 아닙니다. 일반적으로 서드 파티 종속 항목은 자주 업데이트되지 않으므로 캐시할 수 있는 별도의 공급업체 번들로 분할됩니다. SplitChunksPlugin이 이 작업을 어떻게 지원하는지 자세히 알아보세요.
클라이언트 측 프레임워크를 사용할 때 경로 또는 구성요소 수준에서 분할하는 것이 애플리케이션의 여러 부분을 지연 로드하는 더 간단한 방법입니다. webpack을 사용하는 많은 인기 프레임워크는 직접 구성에 뛰어드는 것보다 지연 로드를 더 쉽게 할 수 있도록 추상화를 제공합니다.