JavaScript 코드 분할에 대해 알아야 할 모든 것

Feb 2, 2026
어떻게
JavaScript code splitting

현대 사이트는 종종 모든 JavaScript를 단일으로 결합합니다. main.js. 스크립트. 이 작업은 사용자가 시각하는 페이지에 대해서만 사용자 만 필요한 경우에도 모든 페이지 또는 경로의 스크립트를 정기적으로 포함합니다.

JavaScript 가이 방법으로 제공되면 웹 페이지의 로딩 성능이 특별히 겪을 수 있습니다. 반응 형 웹 디자인 모바일 장치에서. 따라서 JavaScript 코드 분할을 구현하여 해결해 봅시다.

  • 더 빠르게 코드를 강화하는 방법, 가벼운 자바 스크립트

코드가 해결되는 문제는 무엇입니까?

웹 브라우저가 A를 봅니다 & lt; script & gt; 참조하고있는 자바 스크립트를 다운로드하고 처리하는 데 시간을 보내야합니다. 이는 하이 엔드 장치에서 빠르게 느낄 수 있지만 사용하지 않는 JavaScript 코드로드, 구문 분석 및 실행은 느린 네트워크 및 CPU가 느린 평균 모바일 장치에서는 잠시 동안 걸릴 수 있습니다. 커피 숍이나 호텔 와이파이에 로그온해야만 한 적이 있다면 느린 네트워크 경험이 모두에게 일어날 수 있습니다.

부팅을 완료하기 위해 JavaScript를 기다리고있는 각 두 번째 소비자는 사용자가 얼마나 많은 사용자가 경험과 상호 작용할 수 있는지 지연시킬 수 있습니다. 이는 특히 UX가 중요한 구성 요소의 JS에 의존하거나 단순한 UI에 이벤트 처리기를 첨부하는 경우에 특히 그렇습니다.

코드 분할과 함께 귀찮게해야합니까?

코드 분할이 필요한지 여부를 묻는 것은 확실히 가치가 있습니다 (간단히 사용한 경우 웹 사이트 빌더 당신은 아마도). 사이트에서 대화식 콘텐츠 (메뉴 서랍 및 회전식과 같은 기능)에 대한 JavaScript가 필요하거나 UI를 렌더링하기 위해 JavaScript 프레임 워크를 사용하는 단일 페이지 응용 프로그램이면 대답은 '예'일 것입니다. 귀하의 사이트에 대한 코드 분할 가치가 있는지 여부는 자신에게 답변 해야하는 질문입니다. 당신은 당신의 아키텍처와 사이트가 가장 적합한 방식을 이해합니다. 고맙게도 당신을 도울 수있는 도구가 있습니다. 설계 시스템에서 변경 사항을 구현하는 경우 공유의 변경 사항을 저장하십시오. 클라우드 스토리지 팀이 볼 수 있습니다.

도움을 받으십시오

JavaScript 코드 분할 새로운 기능을 위해, 등대 - Chrome 개발자 도구의 감사 패널 - 이것이 귀하의 사이트에 문제가 있는지 여부에 대한 빛을 비추는 데 도움이 될 수 있습니다. 찾을 수있는 감사는 JavaScript 실행 시간을 줄입니다 (문서화 된 여기 짐마자 이 감사는 페이지의 상호 작용을 지연시킬 수있는 페이지의 모든 스크립트를 강조 표시합니다.

PageSpeed ​​Insights. 그것은 또한 사이트의 성능을 강조 표시하고 크롬 사용자 경험 보고서에서 사이트 성능에 대한 등대 및 실제 데이터의 실험실 데이터를 포함 할 수있는 온라인 도구입니다. 너의 웹 호스팅 서비스는 다른 옵션을 가질 수 있습니다.

크롬 개발자 도구의 코드 적용 범위

더 나은 분할 될 수있는 값 비싼 스크립트가있는 것처럼 보이면 다음 도구는 Chrome Developer Tools (DevTools & Gt; Top-Right Menu & Gt; 더 많은 도구 및 gt)의 코드 적용 기능입니다. 이렇게하면 사용되지 않는 JavaScript (및 CSS)가 페이지에 얼마나 많은지 측정합니다. 요약 된 각 스크립트에 대해 DevTools는 '사용되지 않는 바이트'를 표시합니다. 사용자가 필요할 때 튀어 나와 게으른로드를 고려할 수있는 코드입니다.

다른 종류의 코드 분할

코드 분할 JavaScript에 관해서는 취할 수있는 몇 가지 다른 접근 방식이 있습니다. 귀하의 사이트에 적용되는 방법은 페이지 / 응용 프로그램 '논리'를 분리하거나 다른 '공급 업체의 라이브러리 / 프레임 워크를 분할할지 여부에 따라 달라집니다.

동적 코드 분할 : 우리 중 많은 사람들이 정적으로 '자바 스크립트 모듈 가져 오기 및 종속성을 가져 오게하여 빌드 시간에 하나의 파일로 함께 번들이되도록합니다. 'Dynamic'코드 분할은 필요에 따라 분할하고 게으른로드를 분할하려는 JavaScript의 포인트를 정의하는 기능을 추가합니다. 현대 자바 스크립트는 동적을 사용합니다 수입() 이를 달성하기위한 진술. 우리는 이것을 더 곧 더 많이 덮을 것입니다.

공급 업체 코드 분할 : 당신이 의존하는 프레임 워크와 라이브러리 (예 : 반응, 각도, vue 또는 lodash)는 사용자에게 보내는 스크립트에서 자주 사용자가 사이트의 '논리'로 변경 될 것입니다. 사이트로 돌아 오는 사용자가 캐시 무효화의 부정적인 영향을 줄이려면 '공급 업체'를 별도의 스크립트로 분할 할 수 있습니다.

엔트리 포인트 코드 분할 : 항목은 웹 팩과 같은 도구가 종속성 트리를 빌드하기 위해 볼 수있는 도구가있는 사이트의 시작점입니다. 항목 별 분할은 클라이언트 측 라우팅이 사용되지 않거나 서버 및 클라이언트 측 렌더링의 조합에 의존하는 페이지에 유용합니다.

이 기사의 우리의 목적을 위해 우리는 동적 코드 분할에 집중할 것입니다.

코드 분할으로 손을 잡으십시오

A.의 자바 스크립트 성능을 최적화합시다 세 개의 숫자를 정렬하는 간단한 응용 프로그램 코드 분할을 통해 - 이것은 내 동료 Houssein Djirdeh의 앱입니다. JavaScript로드를 신속하게 측정, 최적화 및 모니터링하도록 사용할 워크 플로. 여기에서 시작하십시오 ...에

성능을 측정하십시오

최적화를 추가하기 전에 먼저 JavaScript의 성능을 측정 할 예정입니다. Magic Sorter 앱이 글리치에서 호스팅되면 코딩 환경을 사용할 것입니다. 여기에가는 방법은 다음과 같습니다.

  • 라이브 표시 버튼을 클릭하십시오.
  • CMD + 옵션 + I / Ctrl + Shift + i를 눌러 DevTools를 엽니 다.
  • 네트워크 패널을 선택하십시오.
  • 캐시 비활성화가 선택되어 앱을 다시로드하십시오.

이 간단한 응용 프로그램은 몇 가지 숫자를 정렬하기 위해 71.2KB의 자바 스크립트를 사용하는 것으로 보입니다. 확실히 옳지 않은 것처럼 보이지 않습니다. 우리의 출처에서 src / index.js. , Lodash 유틸리티 라이브러리가 수입되어 사용합니다. 정렬 기준 - 숫자를 정렬하려면 해당 정렬 유틸리티 중 하나입니다. Lodash는 몇 가지 유용한 기능을 제공하지만 앱은 단일 메소드 만 사용합니다. 실제 사실에서만 작은 부분을 사용할 필요가있을 때만 모든 타사 의존성을 설치하고 가져 오는 것이 일반적으로 실수합니다.

번들 최적화

JavaScript 번들 크기를 트리밍 할 수있는 몇 가지 옵션이 있습니다.

  1. varty 라이브러리에 의존하는 대신 사용자 정의 정렬 방법을 작성하십시오.
  2. 사용하다 array.prototype.sort () 브라우저에 내장되어 있습니다.
  3. 그를 가져 오게하십시오 정렬 기준 전체 라이브러리 대신 Lodash의 방법.
  4. 사용자가 필요할 때 정렬을 위해 코드를 다운로드하십시오 (버튼을 클릭하면).

옵션 1과 2는 번들 크기를 줄이는 데 적합합니다. 이는 실제 응용 프로그램에 대해 의미가 있습니다. 교육 목적을 위해, 우리는 다른 것을 시도 할 것입니다. 옵션 3 및 4는 응용 프로그램의 성능을 향상시킵니다.

필요한 코드 만 가져옵니다

몇 가지 파일을 수정하여 단일을 가져올 수 있습니다. 정렬 기준 Lodash에서 필요한 방법. 우리의 교체로 시작합시다 롯데 슈트 의존성 package.json. :

"lodash": "^4.7.0",

이것으로 :

"lodash.sortby": "^4.7.0",

src / index.js에서는 더 많은 특정 모듈을 가져올 것입니다.

 JS.
"./style.css"가져 오기;
"Lodash"에서 가져 오기 _;
"lodash.sortby"에서 sortby 가져 오기, 

그런 다음 값이 정렬되는 방법을 업데이트합니다.

 JS.
Form.AddEventListener ( "제출", e = {
  e.preventDefault ();
  const 값 = [input1.valueasnumber, input2.ValueAsnumber, Input3.ValueAsnumber];
  const sortedValues ​​= _.sortby (값);
  const sortedValues ​​= sortby (값);
  결과 .innerhtml = `.
    & lt; h2 & gt;
      $ {sortedValues}
    & lt; / h2 & gt;
  `
}); 

Magic Numbers 앱을 다시로드하고 개발자 도구를 열고 네트워크 패널을 다시보십시오. 이 특정 앱의 경우 우리의 번들 크기는 거의 작업이 거의없는 4 개의 척도로 감소했습니다. 그러나 개선을위한 많은 공간이 있습니다.

JavaScript 코드 분할

WebPack은 웹 개발자가 오늘날 웹 개발자가 사용하는 가장 인기있는 JavaScript 모듈 번체 중 하나입니다. IT '번들'(결합) 모든 자바 스크립트 모듈 및 기타 자산을 정적 파일로 웹 브라우저로 읽을 수 있습니다.

이 응용 프로그램의 단일 번들은 두 개의 별도 스크립트로 분할 될 수 있습니다.

  • 하나는 초기 경로를 구성하는 코드를 담당합니다.
  • 또 다른 하나에는 정렬 코드가 들어 있습니다.

동적 가져 오기를 사용합니다 ( 수입() 키워드), 두 번째 스크립트는 요구에 따라 게으른로드 될 수 있습니다. 우리의 마술 번호 앱에서는 사용자가 버튼을 클릭 할 때 필요에 따라 스크립트를 구성하는 코드를로드 할 수 있습니다. 정렬 방법에 대한 최상위 수중 가져 오기를 제거하여 시작합니다. src / index.js. :

 "LODASH.SORTBY"에서 수입 정렬; 

버튼을 클릭 할 때 발생하는 이벤트 리스너 내에서 가져 오기 :

Form.AddEventListener ( "제출", e = {
  e.preventDefault ();
  가져 오기 ( 'LODASH.SORTBY'))
    .then (모듈 = & gt; module.default)
    .then (sortinput ())
    .catch (err = & gt; {alert (Err)});
});

이 동적들 수입() 우리가 사용하는 기능은 JavaScript 언어 표준에서 모듈을 동적으로 가져올 수있는 기능을 포함하여 표준 스트랙 제안의 일부입니다. WebPack은 이미이 구문을 지원합니다. 역동적 인 수입이 작동하는 방법에 대해 자세히 알아볼 수 있습니다 이 기사에서 ...에

그만큼 수입() Statement가 해결할 때 약속을 반환합니다. WebPack은 이것을 분리 된 스크립트 (또는 청크)로 탈출 할 분리 지점으로 간주합니다. 일단 모듈이 반환되면 module.default. 제공된 기본 내보내기를 참조하는 데 사용됩니다 롯데 슈트 ...에 약속은 다른 것과 연결됩니다 .그때() 호출 A. SortInput. 세 가지 입력 값을 정렬하는 방법. 약속 사슬의 끝에서, .잡기() 약속이 오류의 결과로 거부되는 위치를 처리하도록 호출됩니다.

실제 프로덕션 응용 프로그램에서는 동적 가져 오기 오류를 적절하게 처리해야합니다. 간단한 경고 메시지 (여기에서 사용되는 것과 유사)는 사용되는 것이며 사용자가 잘못된 것을 알고있는 것을 알려주는 최고의 사용자 경험을 제공하지 못할 수도 있습니다.

"구문 분석 오류 : 가져 오기 및 내보내기가 최상위 레벨에만 나타날 수 있습니다"와 같은 intling 오류가 표시됩니다. 이는 동적 가져 오기 구문이 아직 완성되지 않기 때문입니다. WebPack은 지원을 지원하지만 글리치에서 사용하는 Eslint (JavaScript Linting Tool)에 대한 설정은 아직이 구문을 포함하도록 업데이트되지 않았지만 여전히 작동합니다.

우리가해야 할 마지막 일은 SortInput. 파일 끝에있는 방법. 이는 가져온 메소드에서 가져 오는 함수를 반환하는 함수 여야합니다. lodash.sortby. ...에 중첩 된 함수는 세 가지 입력 값을 정렬하고 DOM을 업데이트 할 수 있습니다.

 const 정렬 = () = & gt; {
  RETURN (SORTBY) = & gt; {
    const 값 = [
      input1.ValueSnumber,
      input2.ValueSnumber,
      input3.ValueSnumber.
    ];
    const sortedValues ​​= sortby (값);
    결과 .innerhtml = `.
      & lt; h2 & gt;
        $ {sortedValues}
      & lt; / h2 & gt;
    `
  };
} 

숫자를 모니터하십시오

이제 마지막으로 응용 프로그램을 다시로드하고 네트워크 패널을 닫습니다. 앱이로드 될 때 작은 초기 번들 만 다운로드되는지 알아야합니다. 버튼을 클릭하여 입력 번호를 정렬하면 정렬 코드가 들어있는 스크립트 / 청크가 가져오고 실행됩니다. 우리가 기대할 때 숫자가 여전히 정렬되는지 알 수 있습니까?

JavaScript 코드 분할 및 Lazy-Loading은 앱 또는 사이트의 초기 번들 크기를 트리밍하는 데 매우 유용 할 수 있습니다. 이로 인해 사용자는 페이지가 빠른 페이지로드 시간을 직접 초래할 수 있습니다. Vanilla JavaScript 응용 프로그램에 쪼개는 코드를 추가하면 라이브러리 또는 프레임 워크로 구축 된 앱에 적용 할 수도 있습니다.

JavaScript 라이브러리 또는 프레임 워크가있는 게으른로드 중입니다

많은 인기있는 프레임 워크가 동적 가져 오기 및 WebPack을 사용하여 코드 분할 및 게으개로드를 추가합니다.

반응을 사용하여 동영상 '설명'구성 요소를 게으른로드하는 방법은 다음과 같습니다. react.lazy () 그리고 그들의 서스펜스 기능) 구성 요소가 게으른 중에있는 동안 "Loading ..."폴드를 제공합니다 (참조 여기 좀 더 자세한 내용은) :

 가져 오기 반응, {반응 '에서 {서스펜스};
const 설명 = react.lazy (() = & gt; 가져 오기 ( './ 설명'));
함수 앱 () {
  반환 (
    & lt; div & gt;
      & lt; h1 & gt; My Movie & lt; / h1 & gt;
      & lt; Spusense Fallback = "로딩 ..."& gt;
        & lt; & gt;
      & lt; / 서스펜스 & gt;
    & lt; / div & gt;
  );
} 

코드 분할은 사용자 경험에 대한 JavaScript의 영향을 줄일 수 있습니다. 자바 스크립트 번들이 더 큰 경우 확실히 고려하고 의심스럽지 않으면 측정, 최적화 및 모니터링을 잊지 마십시오.

이 기사는 원래 문제 317에서 출판되었습니다 그물 웹 디자이너 및 개발자를위한 세계 최고의 잡지. 여기 문제를 구입하십시오 또는 여기를 구독하십시오 ...에

관련 기사:

  • 최고의 JavaScript 프레임 워크 중 9 개
  • 15 필수 JavaScript 도구를 사용해야합니다
  • 최고의 JavaScript Apis의 14.

어떻게 - 가장 인기있는 기사

보기 소스에서 JavaScript 코드를 숨기는 방법

어떻게 Feb 2, 2026

JavaScript 코드로 예방 조치를 취하지 않으면 복제하기를 원하는 사람에게는 인생을 쉽게 할 수 있�..


CSS를 최적화하고 사이트 속도를 최적화하는 21 가지 방법

어떻게 Feb 2, 2026

CSS는 HTML 및 JavaScript와 마찬가지로 상대적으로 복잡한 파이프 라인을 통과해야합니다. 브라우저�..


CSS로 브라우저에서 콜라주 효과 생성

어떻게 Feb 2, 2026

당신이 원한다면 전통의 효과를 복제 할 수 있습니다. 콜라주 메이커 당신의 웹 ..


5 분 이내에 그림을 그립니다

어떻게 Feb 2, 2026

5 분 포즈를 스케치하는 것은 포즈의 강한 감각을 포착 할 충분한 시간을 할애하기 때문에 많은 즐거움이 있지만 그 그림을 과로 할 때 충분한 �..


생물 해부학을 마스터하는 방법

어떻게 Feb 2, 2026

때에 온다 믿을만한 창조물을 그리기 , 골격, 근육질 및 혈관 시스템에 초점을 맞추어�..


아크릴계에서 표현적인 정물화를 칠한다

어떻게 Feb 2, 2026

아직도 인생은 모두의 차 한잔이 아닙니다. 특정 세트가 필요합니다. [삼] 그림 기술 -하지만 나에게는 항상 좋아하는 것이 었습니다. �..


HTML 비디오 작업 방법

어떻게 Feb 2, 2026

YouTube를 위로 이동하십시오 ... & lt; 비디오 & gt; 요소와 조금 자바 스크립트 , 자�..


텍스처 워크 플로우 속도 향상

어떻게 Feb 2, 2026

전사는 개인적인 프로젝트이며, 개념과 설계의 기쁨을 가졌습니다. 나는 의의와 미덕을 위해 전�..


카테고리