- 프로젝트: 공우 홈페이지
- 키워드: prefetch, Link, SSR, SSG, CSR, Next.js, Chrome DevTools Network
- 상황
- Next.js가 최초 진입한 페이지의 html파일만 가져온다는 사실은 알고 있었지만, 다른 페이지로 이동할 때 어떤 데이터가 언제 불러와지는지 정확히 알진 못했다.
- Next.js로 구현한 공우 홈페이지에서 Chrome Devtools Network 탭을 통해 궁금증을 해소하고자한다.
- 해결과정
- 먼저 공우 홈페이지에 들어가 network 탭에서 Doc 파일을 확인한다.
chrome devtools network tabㅇ
역시 최초 진입한 페이지의 html만 가져오고, 다른 페이지로 이동하여도 추가적인 html 요청은 없다. - 다른 페이지에 대한 정보를 언제 가져오는지 알기위해 Fetch/XHR과 JS 탭을 확인한다.
Fetch/XHR tab JS tab
최초 페이지에 진입하고 바로, 다른 페이지에 필요한 json과 js파일들을 모두 불러온다.
즉 최초 페이지는 SSG(또는 SSR)이라 html 파일을 받아와 FCP를 빠르게 하고, 다른 페이지들은 미리 js를 불러와두어 page routing을 할 때 CSR로 동작해 페이지 전환 속도까지 빠르게 한 것이다. - Next.js의 페이지 로드 속도가 빠른 이유는 알았으니 언제 해당 데이터들을 요청하는지 알아보고자 한다. Next Link에 대한 공식 문서를 읽어보아야한다.
https://nextjs.org/docs/api-reference/next/link
Link 컴포넌트에 prefetch prop이 있고 default값은 true이다. 이 경우 viewport에 Link가 있을 경우 해당 url에 대한 js와 json data를 요청하는 것이다. 이때, SSG일 경우 미리 계산된 json data를 받아올 수 있지만 SSR일 경우에는 받아올 수 없다(SSR은 페이지 요청 시에 data를 요청하기 때문에). - Link 컴포넌트를 쓰지않고 react/router를 이용하여 라우팅할 때에도 prefetch 기법을 이용할 수 있다.
https://nextjs.org/docs/api-reference/next/router#routerprefetch
router.prefetch(url, as)
위와 같이 이동할 url에 대해 미리(ex> mounted 시점) prefetch를 해두면 실제로 'router.push(url)'를 할 때 Link 컴포넌트를 사용한 것과 같이 동작할 수 있다.
- 먼저 공우 홈페이지에 들어가 network 탭에서 Doc 파일을 확인한다.
- 의의
- image source를 prefetch하여 UX를 개선한 경험은 있었는데, 프레임워크 수준에서 페이지를 prefetch하는 기법도 학습할 수 있었다.
- image source를 prefetch하여 UX를 개선한 경험은 있었는데, 프레임워크 수준에서 페이지를 prefetch하는 기법도 학습할 수 있었다.
'프론트엔드 > Next.js' 카테고리의 다른 글
routeChange event로 page transition loading UI 구현하기 (0) | 2022.09.19 |
---|---|
Next.js에 PWA 적용하기 (0) | 2022.07.03 |
Next.js SEO plugin 이용하기(feat. next-seo, next-sitemap) (0) | 2022.07.03 |
Next.js API routes CORS 대응하기 + hook 이중 호출 방지하기 (0) | 2022.04.22 |
Next.js에서 SSG 와 revalidate 사용하기 (0) | 2021.11.15 |