일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 프론트엔드
- 자동 배칭
- router dom
- rendering
- react rendering
- Interface
- useMemo
- TS
- useCallback
- 배칭
- Front-End
- 자바스크립트
- react code splitting
- NextJS
- 고급타입
- 상태 끌어올리기
- 리액트 코드분할
- react router dom v6
- mapped types
- lifting state up
- 타입스크립트
- React
- JavaScript
- TypeScript
- 리액트
- Next.js
- 렌더링 동작원리
- state 최적화
- 렌더링
- 타스
- Today
- Total
서녕이네 개발단지
[React] Code Splitting (코드 분할) 본문
Code Splitting (코드 분할)
CRA 나 Next.js 와 같은 툴을 사용한다면 이미 App 자체에 Webpack 이 설치되어 있을 것이다.
'흩어져 있는 파일들을 압축하여 bundling size를 줄인다.'라는 명목 자체는 매우 훌륭하지만,
앱이 커질수록 해당 번들도 커질 가능성이 농후하다.
특히 큰 사이즈의 3rd party library를 사용하였을 때는 번들 사이즈 또한 커지기 때문에 로드 시간이 길어지고 이는 곧 웹서비스의 성능에 악영향을 끼친다.
번들이 거대해지는 것을 방지하기 위해서 code splitting을 고민해보아야 한다. 코드분할은 앱을 지연로딩(lazy-loading) 하게 도와주고, 이는 앱의 코드 양을 줄이지 않고도 사용자가 필요하지 않은 코드를 불러오지 않게 하며 앱의 initializing에 필요한 loading resource 자체를 줄여준다.
예시
import()
- 애플리케이션에 code splitting을 도입하는 가장 좋은 방법은 동적 import() 구문을 이용하는 것이다.
전
import { add } from './math';
console.log(add(16, 26));
후
import("./math").then(math => {
console.log(math.add(16, 26));
});
Webpack 이 해당 구문을 만나게 되면 자체적으로 앱의 Code를 Splitting 한다.
하지만, Babel을 사용한다면 Babel 은 위와 같은 동적 import를 인식할 수는 있지만, 자체적으로 분할하지는 않는다. 그에 따라, babel-plugin-synyax-dynamic-import를 사용해야만 한다.
❗️하지만 ❗️
Create React App을 사용한다면 이미 설정되어 있어 사용할 수 있다. Next.js에서도 지원된다.
마무리
Bundling 툴은 보통 코드를 압축하기에 이에 따른 import 하는 과정에서 너무 많은 리소스를 낭비할 수 있기에,
이 부분에 대해서는 code splitting 이 유용하게 쓰인다.
참고
https://velog.io/@odini/Code-Splitting코드-스플릿팅#reactlazy
'프론트엔드 > React' 카테고리의 다른 글
[React] React-Router-Dom V6의 동작원리 (0) | 2023.06.16 |
---|---|
[React] automatic batching (자동 배칭) (0) | 2023.06.12 |
[React] Lazy Loading (지연 로딩), Suspense (서스펜스) (0) | 2023.06.11 |
[React] 렌더링 최적화 (0) | 2023.06.11 |
[React] Rendering (렌더링 동작원리)(2) (0) | 2023.06.10 |