노트

이미지 로딩 우선순위(loading·fetchpriority)

Image Loading Priority

프런트엔드#performance#html · 연결된 개념 3개

쉽게 말하면

loading은 이미지를 언제 받을지, fetchpriority는 받을 때 얼마나 급한지 브라우저에 알려 주는 속성이에요. 응급실 분류표처럼 첫 화면의 큰 이미지를 먼저 받게 해서 화면이 빨리 완성돼요.

비유가 깨지는 곳 모두에게 '급함' 표를 붙이면 아무 의미가 없어요. 브라우저 기본 우선순위가 대체로 맞으니 근거가 있을 때만 덮어쓰고, lazy와 high는 반대 신호라 같이 쓰지 않아요.

loading은 이미지를 언제 받을지(lazy·eager)를, fetchpriority는 받을 때 얼마나 급한지(high·low·auto)를 브라우저에 알려 주는 HTML(HyperText Markup Language) 속성이다. 둘 다 LCP(Largest Contentful Paint)에 직접 영향을 준다.

  • 브라우저는 텍스트보다 이미지를 그리는 데 오래 걸린다. 이미지를 찾고, 받고, 그리는 단계를 모두 거쳐야 한다
  • 화면 밖 이미지에는 loading="lazy"를 쓴다. 자세한 동작은 이미지 loading 속성
  • 첫 화면에서 가장 큰 이미지(히어로, 첫 캐러셀 장)는 lazy로 두면 안 되고, 필요하면 fetchpriority="high"를 준다
  • loading="lazy"와 fetchpriority="high"를 같이 쓰지 않는다. 서로 반대 방향의 신호다
  • 브라우저의 기본 우선순위는 대체로 잘 맞는다. 이 속성들은 기본값을 덮어쓰는 것이니 근거가 있을 때만 쓴다. 전부 high로 주면 아무 의미가 없다
  • 이미지를 더 일찍 발견하게 하는 방법은 preload이고, Next.js의 next/image는 기본이 lazy다

출처: Chrome for Developers - Debugging Fetch Priority · web.dev - Optimize resource loading with the Fetch Priority API

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 반응형 웹 디자인

    하나의 페이지가 화면 크기와 기기에 맞춰 레이아웃·이미지·글자 크기를 바꾸도록 만드는 접근. 미디어 쿼리(Media Query), 유연한 레이아웃(Flexible Layout), 반응형 미디어(Responsive Media)가 세 축이다.

  • loading 경계와 레이아웃 끌어올리기

    Next.js App Router에서 loading.tsx는 같은 세그먼트의 page와 그 아래(하위 layout 포함)를 suspense로 감싸지만, **같은 세그먼트의 layout은 감싸지 않는다**. 그래서 데이터를 기다릴 필요가 없는 공통 UI(탭바, 필터 헤더)를 page에서 layout으로 끌어올리면 스켈레톤에 덮이지 않고 처음부터 실제 모습으로 보인다.

  • 브라우저 캐시

    한 번 받은 리소스(HTML·CSS·JS·이미지)를 브라우저가 저장해 두었다가 다시 쓰는 기능. 서버가 응답 헤더로 얼마나, 어떻게 캐시할지 알려 주고 브라우저가 그대로 따른다.

  • 크로스 브라우징

    크로스 브라우징은 브라우저 종류·버전·기기가 달라도 웹 페이지가 같은 기능을 제공하도록 만드는 일이다. 모든 브라우저에서 픽셀까지 똑같이 보이게 하는 것이 목표가 아니라, 지원하기로 한 환경에서 핵심 기능이 동작하고 오래된 환경에서도 쓸 수는 있게(점진적 향상, Progressive Enhancement) 하는 것이 목표다.

  • 지연 로딩

    연관된 엔티티를 처음 접근할 때 조회하는 방식. 그 전까지는 그 자리에 프록시(컬렉션이면 Hibernate 컬렉션 래퍼)가 들어 있다.

보기 옵션