Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- typescript
- 누구나 자료구조와 알고리즘
- JS console
- 폰트적용하기
- 타입스크립트
- Chart.js
- 개발콘텐츠
- reactjs
- 반복줄이기
- react
- returnType
- React Native
- 레이아웃쪼개기
- 리액트
- click and drag
- NonNullable
- vue.js
- 티스토리꾸미기
- utilty type
- 성능최적화
- 타입좁히기
- TSDoc
- 공통컴포넌트
- 제네릭
- React.js
- 2022
- javascript
- 커스텀
- CSS
- const 단언문
Archives
- Today
- Total
몽땅뚝딱 개발자
성능 최적화하기 - (5) 프리로딩(Preloading) 본문
◽ Preload이란
필요한 리소스 자원을 서버에 요청할 때 여러자원을 동시에 요청하게 되고, 서버에서는 요청 순서에 상관없이 준비가 되는대로 응답을 하게 된다. 이때 우선순위를 부여하여 특정 리소스를 빠르게 로딩하도록 하는 것이 바로 preload이다.
◽ Preload 타이밍
1. 버튼 위에 마우스를 올려놨을 때
2. 최초페이지 로드 후 모든 컴포넌트의 마운트가 끝났을 때
모달 코드를 미리 로드한다.
function App() {
const [showModal, setShowModal] = useState(false)
// 화면이 렌더링 된 후 특정함수를 실행하는 hook
// 미리 import하여 화면이 미리 렌더링 될 수 있도록 한다.
useEffect(() => {
const Component = import('./components/ImageModal')
}, [])
return (
<div className="App">
<Header />
<InfoTable />
<ButtonModal
onClick={() => { setShowModal(true) }}
>
올림픽 사진 보기
</ButtonModal>
<SurveyChart />
<Footer />
<Suspense fallback={null}>
{showModal ? <LazyImageModal closeModal={() => { setShowModal(false) }} /> : null}
</Suspense>
</div>
)
}
function lazyWithPreload(importFunction) {
const Component = React.lazy(importFunction)
// preload라는 키로 함수를 지정하여 호출한다.
Component.preload = importFunction
return Component
}
const LazyImageModal = lazyWithPreload(() => import('./components/ImageModal'))
function App() {
const [showModal, setShowModal] = useState(false)
useEffect(() => {
LazyImageModal.preload()
}, [])
// const handleMouseEnter = () => {
// const Component = import('./components/ImageModal')
// }
return (
<div className="App">
<Header />
<InfoTable />
<ButtonModal
onClick={() => { setShowModal(true) }}
>
올림픽 사진 보기
</ButtonModal>
<SurveyChart />
<Footer />
<Suspense fallback={null}>
{showModal ? <LazyImageModal closeModal={() => { setShowModal(false) }} /> : null}
</Suspense>
</div>
)
}
◽ 이미지 preload
useEffect 같이 모두 마운트 된 이후에 실행되는 hook을 지정하여 이미지를 미리 다운로드하는 함수를 실행한다.
useEffect(() => {
const img = new Image()
img.src = "https://stillmed.olympic.org/media/Photos/2016/08/20/part-1/20-08-2016-Football-Men-01.jpg?interpolation=lanczos-none&resize=*:800"
}, [])
cache-control 항목에서 max-age를 확인할 수 있다.
ex) max-age=1625 (=1625초 동안 캐시가 적용)
출처
'Development > 성능최적화' 카테고리의 다른 글
성능 최적화하기 - (7) Element Lazy Loading (0) | 2022.05.30 |
---|---|
성능 최적화하기 - (6) 코드 스플리팅(Code Spliting) (0) | 2022.05.27 |
성능 최적화하기 - (4) Component Lazy Loading (0) | 2022.05.27 |
성능 최적화하기 - (3) 애니메이션 최적화 (0) | 2022.05.27 |
성능 최적화하기 - (2) 이미지 최적화 (0) | 2022.05.27 |
Comments