결과만 이야기하면,
전 | 후 |
---|---|
웹 성능 최적화에 관심을 가지게 된 것은
라는 고민? 생각?을 하던 시기에 접했던 강의에서 배운대로 내가 담당하게 된 서비스를 Light House
로 점검해보았다! 그런데 왠걸..
Performance
점수도 안좋고, 틈틈이 리펙토링을 해보기로 했다.
Next.js
프로젝트 성능 개선하기최초 로딩 속도가 얼마나 느릴까? 확인해보고 싶었다. 그런데.. 생각보다 너무 느리더라..
자세히 살펴보니 당장 필요하지 않은 동영상 파일과 이미지 파일들이 너무 많다.. 좀 나눠서 필요한 시점에 로딩시켜볼 수 있겠다 싶었다
그리고 assets 폴더의 거의 200개의 이미지, SVG 파일들을 한번에 묶어서 사용하도록 되어있었는데, 이 부분에서 배포하려고 빌드할 때도 워닝으로 알려주었다. 너무 크다고..😰
일단, 네트워크 탭에서의 서비스 상태를 확인하고 Light House
도 검사했다.
Light House
결과loading="lazy"
값을 주면 Lazy loading이 적용된다.next.config.js
파일에서 이미지의 캐시 TTL을 지정해 줄 수 있다. 외부 도메인에서 이미지를 가져올 경우, next.config.js
파일에 도메인 정보를 추가해 주어야 한다.// next.config.js
module.exports = {
images: {
domains: [...],
minimumCacheTTL: 60,
}
};
// next/image
<Image
// ...
loading="lazy"
/>
음.. Performance
점수가 매우 안좋군! 하나씩 고쳐가보자! 💪
@next/bundle-analyzer
로 분석해보기Nextjs Project는 @next/bundle-analyzer으로 분석할 수 있다
yarn add @next/bundle-analyzer
# 설치 후 `next.config.js` 설정하기
package.json | 빌드된 후 |
---|---|
storyplay-server/web/.next/analyze/nodejs.html | storyplay-server/web/.next/analyze/client.html |
---|---|
간단해보였기에 가장 먼저 시작한 작업. 그러나 사용하는 파일을 모두 수정하는 노가다 작업이었다..ㄷㄷ 🫠
사용하는 시점에 모두 import 하지 않고 사용할 파일만 import 되도록 분리했다.
그리고 미사용중인 파일 45개 모두 삭제했다
전 | 후 |
---|---|
Lazy Loading(Code Spltting)
담당하는 서비스의 홈 가장 하단에 모든 컨텐츠들을 보여주는 컴포넌트가 있는데 이 부분을 분리시켰다.
즉, 필요한 시점에 렌더링을 시켰다
useIntersection hook을 만들어서 보여주는 시점에 렌더링 시켰다
필요한 시점에 렌더링 시키고, JS 파일도 분리된 것을 확인할 수 있다.
적용 |
---|
분리된 JS 파일 |
필요한 시점에 이미지 파일 불러오기 |
필요한 시점에 렌더링 시키기 |
테스트로 가장 큰 컴포넌트만 적용시켰는데 나머지 컴포넌트도 적용시켜야겠다!
Reduce unused Javascript
에 해당하는 상황이 어느 곳인지 해결하고자 coverage
탭도 확인해보았으나 눈에 띄는 부분은 찾지 못했고..😞import
하고 있는 상황을 발견했다!!!문득 터미널에서 빌드하면서 발견한 내용으로 파일 변경 시도!
전 | 후 |
---|---|
Serve static assets with an efficient cache policy
에 해당하는 내용 조치next.config.js
에 minimumCacheTTL
를 추가 const nextConfig = {
images: {
domains: [
// ... 생략
],
minimumCacheTTL: 60,
},
minimumCacheTTL
을 60으로 설정하면, 전 | 후 |
---|---|
이렇게 작업하다보니, Light House
의 점수가 어떻게 변했을지 궁금해졌다!
그래서 중간 점검!!! ⇩⇩
Light House
오오!! Performance
점수가 올랐다?! 🎉🎉🎉
그리고 내용도 좀 달라졌다!
꾸준히 점검해가며 관리해야겠다! 흐흐
Lighthouse는 실제 속도가 어떻든 간에, 화면에 콘텐츠가 얼마나 빨리 표시되고 사용자는 얼마나 빠르게 해당 콘텐츠를 인식하는 지에 더욱 초점을 맞추고 있다.
Lighthouse는 웹 애플리케이션의 접근성을 검사한다. <img>
태그에 alt
속성이 있는지, <html>
태그에 lang
속성이 있는지, 배경색과 전경색의 대비가 충분한지와 같은 항목을 확인한다.
Lighthouse는 웹 페이지가 웹에 대한 표준 모범 사례를 따르고 있는지 확인한다. 웹 애플리케이션을 가동할 때 콘솔에 오류가 출력되진 않는지, 더는 사용하지 않는 API를 호출하고 있지 않은지, HTTPS를 통해 해당 페이지에 접근할 수 있는지와 같은 항목을 확인한다.
Lighthouse는 웹 페이지가 검색 엔진에 대해 최적화된 순위 결과를 가지고 있는지 확인한다. 각 사용자가 자신의 디바이스를 이용하여 웹 페이지에 접근하였을 때 그들이 콘텐츠를 읽는 데에 무리가 없는 글꼴 크기를 사용하는지, 웹 페이지의 robots.txt 파일이 유효한지, 올바른 상태 코드를 사용하는 지와 같은 일부 SEO 모범 사례를 확인한다.
Lighthouse는 Progressive Web App을 정의하는 일련의 기준에 따라 웹 페이지를 확인한다. 이 검사는 해당 웹 페이지가 항목을 따르고 있는지 측정하여 점수를 부여하는 것이 아니다. 웹이 HTTP를 HTTPS로 리다이렉션하는지, 응답 코드는 명확한지, 3G 네트워크에서도 로딩이 빠르게 이루어지는 지와 같은 여부를 검사하여 합격 또는 실패를 부여한다.