포장 최적화 실천 (어떻게 코드 분할)
웹 팩 플러그 인 을 사용 하여 공간 이 큰 가방 을 찾 습 니 다.
개발 환경 에서 analysis - webpack - plugin 을 사용 하여 각 모듈 의 점용 상황 을 관찰 할 수 있 습 니 다.이 항목 의 경우 브 라 우 저 에 입력
http://localhost:3000/analyze.html
하면 다음 과 같은 효 과 를 볼 수 있 습 니 다.필요 에 따라 불 러 오기
code-spliting
MiniCssExtractPlugin 플러그 인 을 사용 하여 JavaScript 와 Css 파일 을 분리 합 니 다.
823.94 KB build / static / js / main.496a38b7.js
8.2 KB build / static / css / main.css
code - spliting 은 공식 적 으로 세 가지 방안 을 제시 하 는데 각각 다음 과 같다.
프로젝트 1: entry 에 포장 입 구 를 추가 합 니 다.
방안 1 의 단점 은 다음 과 같다.
그래서 방안 1 은 보통 방안 2, 방안 3 과 결합 하여 사용 하 는데 방안 1 의 설정 은 대체적으로 다음 과 같다.
entry: [require.resolve('./polyfills'), paths.appIndexJs],
//
entry: {
polyfill: require.resolve('./polyfills'),
IndexJs: paths.appIndexJs,
},
프로젝트 2: 플러그 인 사용
SplitChunkPlugin
optimization: {
runtimeChunk: false,
splitChunks: {
cacheGroups: {
vendor: {
chunks: 'all',
test: /[\\/]node_modules[\\/]/,
name: 'vendor',
maxAsyncRequests: 5,
priority: 10,
enforce: true,
},
},
},
},
포장 효 과 는 다음 과 같 습 니 다:
723.96 KB build/static/js/vendor.a9289a29.chunk.js // node-modules
98.72 KB build/static/js/main.7bcaca24.js
8.2 KB build/static/css/1.css
이 때 node - modules 의 가방 을 큰 덩어리 로 포장 하면 로 딩 에 여전히 우호 적 이지 않 습 니 다.솔 루 션 은 핵심 프레임 워 크 를 따로 포장 하고 나머지 모듈 을 비동기 로 불 러 옵 니 다. 예 를 들 어 bundle - loader 를 사용 할 수 있 습 니 다).
optimization: {
runtimeChunk: false,
splitChunks: {
cacheGroups: {
vendor1: { //
chunks: 'all',
test: /[\\/]node_modules[\\/](react|react-dom|antd)[\\/]/,
name: 'vendor1',
maxAsyncRequests: 5,
priority: 10,
enforce: true,
},
vendor2: { //
chunks: 'all',
test: /[\\/]node_modules[\\/]/,
name: 'vendor2',
maxAsyncRequests: 5,
priority: 9,
enforce: true,
reuseExistingChunk: true,
},
},
},
}
포장 효 과 는 다음 과 같 습 니 다:
588.06 KB build/static/js/vendor2.d63694f4.chunk.js
133.17 KB build/static/js/vendor1.0d40234c.chunk.js
98.72 KB build/static/js/main.b7a98d03.js
8.2 KB build/static/css/2.css
이 때 를 볼 수 있 습 니 다 nodemodules 패 키 지 는 이미 핵심 모듈 과 비 핵심 모듈 로 나 뉘 었 다.
동적 도입 문법 사용
import()
먼저 홈 페이지 앤 리 의 react - loadable 이 가방 을 사용 합 니 다. 이 가방 은
(대체 모듈) 코드 의 동적 분할, 비동기 로 필요 한 구성 요 소 를 불 러 와 페이지 로 딩 속 도 를 크게 향상 시 키 는 것 이 사상 입 니 다.루트 인터페이스 에서 다음 설정 을 진행 합 니 다:
const Loading = () => Loading...
const Home = Loadable({
loader: () => import('../pages/home'),
loading: Loading,
})
//
우 리 는 코드 분할 후의 결 과 를 보 았 다.
여기 서 테스트 결 과 는 방안 2 의 설정 을 제거 한 후에 진 행 된 것 이다. 실험 을 비교 한 후에 방안 3 을 사용 하 는 방식 은 방안 2, 3 이 공동으로 사용 하 는 방식 보다 약간 우수 하 다.
235.89 KB build/static/js/IndexJs.57ee1596.js
225.94 KB build/static/js/15.c09a5919.chunk.js
138.18 KB build/static/js/17.30c26142.chunk.js
82.71 KB build/static/js/1.667779a6.chunk.js
57.55 KB build/static/js/16.f8fa2302.chunk.js
16.46 KB build/static/js/2.e7b77a5d.chunk.js
14.79 KB build/static/js/18.cad1f84d.chunk.js
12.51 KB build/static/js/0.73df11a7.chunk.js
11.22 KB build/static/js/13.19501c58.chunk.js
8.34 KB build/static/js/5.33fd1c35.chunk.js
7 KB build/static/js/8.9f1d0a47.chunk.js
5.86 KB build/static/js/12.24f0a7ec.chunk.js
5.06 KB build/static/css/18.css
4.97 KB build/static/js/polyfill.1c61a660.js
3.58 KB build/static/js/7.dd4976e3.chunk.js
3.53 KB build/static/js/14.16f6b811.chunk.js
3.42 KB build/static/css/17.css
2.98 KB build/static/js/10.464a61e4.chunk.js
2.02 KB build/static/js/11.3728d5a9.chunk.js
1.45 KB build/static/js/6.92fbac58.chunk.js
1.13 KB build/static/js/9.59160a3a.chunk.js
몇 개의 경로 가 있 으 면 react - loadable 라 이브 러 리 는 자동 으로 몇 개의 가방 파일 을 더 나 누 어 줍 니 다.큰 프로젝트 일수 록 이런 동 태 는 인 고 를 끌 어 들 이 는 장점 이 뚜렷 하 다 고 상상 할 수 있다.
그리고 우리 가 / home 에서 홈 구성 요소 만 불 러 왔 고 다른 구성 요소 만 불 러 오지 않 았 음 을 뚜렷하게 볼 수 있 습 니 다!
그러면 react - loadable 의 신비 한 힘 은 어떻게 실현 되 었 습 니까? 이 는 본질 적 으로 속성 대 리 를 활용 한 고급 함수 입 니 다. 고급 함수 에 배합
import()
을 통 해 각종 상 태 를 추가 하여 비동기 로드 모듈 의 효 과 를 얻 을 수 있 습 니 다.참고 문헌
code-splittingCode-Splitting(react)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qiita API v2를 Ajax에서 사용하기위한 webpack 설정 (로컬 개발 환경 전용)에서는 Qiita의 기사 목록, 사용자 세부 정보, 기사를 '좋아요'한 사람 목록 및 재고가 있는 사람 목록을 검색할 수 있습니다. Qiita 화면에서 기사를 재고한 사람을 볼 수 없기 때문에 API를 통해 기사를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.