debugbear : 로딩 성능을 분석 및 다양한 성능 지표 참고
PageSpeed Insights : 실제 사용 환경과 유사한 조건에서 성능 측정

Mobile 점수

Desktop 점수
웹 폰트 OR 로컬 폰트
preconnect 를 이용해서 빠르게 로드적용 폰트: Spoqa Han Sans Neo
[로컬폰트 → 웹폰트] 웹폰트로 변경
기존에 사용하던 Local 폰트 용량이 너무 커서 (Pretendard: 267KB) 웹 폰트로 변경

CDN을 사용하여 폰트를 직접 서브하여 사용 (subset 폰트 사용)
[디자인 소통] OTF와 TTF 그리고 WOFF와 WOFF2
OTF 🆚 TTF
WOFF 🆚 WOFF2
Subset 폰트 🆚 Variables 폰트
사용하는 폰트 종류는 1개만 사용
Variables는 여러가지 font weight를 포함하고 있기때문에 subset보다 용량이 큼
Variables 1개보다 필요한 굵기의 subset 폰트를 선택적으로 사용하는게 점수 개선에 도움이 됨
font-display: swap;
src : woff2와 woff 형식을 제공 → 다양한 브라우저에서 지원하는 최적의 폰트 파일을 사용
@font-face {
font-family: 'Pretendard';
font-weight: 400;
font-display: swap;
src:
local('Pretendard Regular'),
url(/fonts/Pretendard-Regular.subset.woff2) format('woff2'),
url(/fonts/Pretendard-Regular.subset.woff) format('woff');
}
[참고] Next.js에서 리소스를 프리로드(Preload) 방법
🙅♀️ 개선 과정에서 발견한 방법이나 사용하지는 않음
폰트 preload와 font-face을 선언한 global.css 를 함께 사용해봄
preload가 될 뿐, 사용되지 않아 warning 발생
The resource [URL] was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate as value and it is preloaded intentionally
폰트를 브라우저가 우선적으로 다운로드하고 처리하도록 지시
리소스 프리로드용 client 컴포넌트를 별도 생성 (폰트말고 다른것도 추가 가능)
✅ Next.js에서 메타데이터를 제외하고, head 태그 내부에 link를 추가하는 방법
as: 리소스의 유형을 지정
type: 리소스의 MIME 타입을 지정
'use client'
import ReactDOM from 'react-dom'
export function PreloadResources() {
ReactDOM.preload('/fonts/Pretendard-Regular.subset.woff2', {
as: 'font',
type: 'font/woff2',
fetchPriority: 'high',
})
return null
}
루트 경로의 layout.tsx에 프리로드 컴포넌트를 호출하여 head 내부에 적용
export default async function RootLayout({ children }: Readonly<RootLayoutType>) {
return (
<>
{/* 리소스 프리로드 컴포넌트 */}
<PreloadResources />
<html lang="ko">
<body>
{children}
</body>
</html>
</>
)
}
이미지 압축 → 경량화
이미지 리소스를 Webp 확장자로 추출한 후, TinyPNG 웹사이트를 이용하여 이미지 압축
[참고] 이미지 CDN 서비스도 함께 제공, 업로드하면 자동으로 압축(첫 업로드 500장 이미지, 매월 무료)
CDN 사용
[참고] 반응형 이미지
Next.js Image 컴포넌트 사용