프로젝트 옐로우핑거 소개 연구실 문의하기
contact@yellow-finger.com
02.2205.4128
Optimizing The Image Element LCP
이미지 요소 LCP를 최적화합니다
Optimizing The Image Element LCP
Largest Contentful Paint (or LCP) is a major web performance KPI which is still a new concept for many web developers since it became a ranking factor just recently. In this article, Eloïse Martin provides an overview of the best practices for the integration and optimization of an LCP image.
LCP(Large Contentful Paint)는 주요 웹 성능 KPI로, 최근 랭킹 요소가 된 이래로 많은 웹 개발자들에게 여전히 새로운 개념입니다. 이 기사에서 Eloesse Martin은 LCP 이미지의 통합 및 최적화를 위한 모범 사례에 대한 개요를 제공합니다.
요약 :)
LCP(Largest Contentful Paint) 는 Core Web Vitals의 세 가지 지표 중 하나입니다.

이러한 측정항목은 Google에서 사용자 경험의 품질을 평가하는 데 사용됩니다.

LCP는 브라우저가 뷰포트에 주요 콘텐츠를 로드하는 데 걸리는 시간을 측정합니다.
더보기→

출처.
Eloïse Martin. (2023.01.16). Smashing Magazine. Optimizing The Image Element LCP . 2023.01.18. https://www.smashingmagazine.com/2023/01/optimizing-image-element-lcp/
LCP(Largest Contentful Paint) 는 Core Web Vitals의 세 가지 지표 중 하나입니다. 이러한 측정항목은 Google에서 사용자 경험의 품질을 평가하는 데 사용됩니다. LCP는 브라우저가 뷰포트에 주요 콘텐츠를 로드하는 데 걸리는 시간을 측정합니다. 최근 순위 요소가 된 이후로 이 주요 웹 성능 KPI는 여전히 많은 웹 개발자에게 새로운 개념입니다. LCP 요소가 이미지일 때 최적화하기가 특히 까다로워집니다 . 이 문제를 해결하기 위해 LCP 이미지의 통합 및 최적화를 위한 모범 사례에 대한 개요를 제공하겠습니다. 다음 내용을 다루겠습니다. 적절한 LCP 이미지 크기 조정에 초점을 두고 태그를 사용하여 LCP 리소스 로드 시간 하위 부분을 개선하는 방법 . LCP 이미지를 올바르게 이해하고 통합할 수 있도록 이 태그 및 해당 속성에 대한 브라우저의 동작에 대한 몇 가지 설명 . LCP 리소스 로드 지연 하위 부분을 개선하는 방법 . 모든 설명은 우리가 반복할 예제로 설명될 것입니다. 기사의 Codepen 데모에 사용된 이미지는 TwicPics 와 통합되어 생성 시간을 절약하고 LCP 메트릭의 최적화 속도를 높일 것입니다. 참고 : 다른 LCP 하위 부분은 "Time to first Byte" 및 "Element render delay"이며 여기서는 다루지 않습니다. 4개의 LCP 하위 부분과 서로의 관계에 대해 자세히 알아보려면 Philip Walton과 Barry Pollard가 작성한 " 가장 큰 콘텐츠 페인트 최적화 " 기사를 읽어 보십시오 . 웹 페이지에서 LCP 요소를 식별하는 방법을 알아보려면 Laurent Cazanove의 이 가이드 를 확인하세요. 점프 후 더! 아래 계속 읽기 ↓ 모바일 인터페이스를 위한 터치 디자인을 만나보십시오 . Steven Hoober의 검증된 보편적인 인간 중심 가이드라인으로 모바일 디자인에 대한 새로운 가이드 입니다. 400페이지 , 심도 있는 사용자 연구 및 모범 사례 로 가득 차 있습니다 . 목차 바로가기 ↬ 기능 패널 태그 # 의 도움으로 LCP 리소스 로드 시간 개선 여기서 목표는 시각적 품질을 손상시키지 않으면서 LCP 이미지의 로딩 시간을 최대한 줄이는 것입니다. 이 작업을 성공하기 위한 핵심 포인트 중 하나는 브라우저가 이미지의 가장 적합한 버전을 선택하도록 하는 것 입니다. 속성 을 통해 단일 이미지 파일을 선언하는 대신( src모든 장치에서 모든 사용자에게 치수가 동일함) 브라우저가 각 컨텍스트에 가장 적합한 이미지 파일을 선택하도록 해야 합니다. 이 접근 방식을 사용하면 더 작은 장치의 사용자가 더 작은 크기의 이미지를 다운로드할 수 있습니다. 이렇게 하면 이미지가 더 빨리 로드되고 웹사이트에서 더 나은 LCP 점수를 얻을 수 있습니다. 같은 사진이 표시된 모바일, 모니터, iPad의 세 가지 장치를 향해 걸어가는 여성의 삽화가 모니터에 있는 것이 강조 표시됩니다. ( 큰 미리보기 ) 이렇게 하려면 태그 srcset와 sizes속성을 사용하여 필요한 정보를 브라우저에 제공해야 합니다. 이 속성은 고유 너비srcset 에 대한 설명과 함께 이미지 파일 목록을 브라우저에 지시합니다 . 이 sizes속성은 이미지의 의도된 표시 너비를 브라우저에 알려줍니다. CSS 미디어 쿼리와 결합하여 화면 너비에 적합한 이미지를 선택할 수 있습니다. 참고 : 브라우저가 뷰포트 의 너비 또는 이미지 형식 호환성과 같은 장치 특성에 따라 다른 이미지를 로드하도록 허용하는 대신 태그를 사용할 수 있습니다 . 간단히 하기 위해 예제에서는 태그 만 사용합니다 . 태그 의 srcset속성 # 태그 의 srcset속성은 이미지 파일 목록과 고유 너비를 나타냅니다. 브라우저는 이 목록을 사용하여 사용자의 컨텍스트에 가장 적합하다고 생각되는 이미지를 선택합니다. 이렇게 하면 srcset특성이 LCP 이미지 최적화를 향한 첫 번째 단계가 됩니다. 이미지 요소 LCP를 최적화합니다 복사 이 이미지 목록을 선언하려면 모바일 우선 접근 방식 을 따르는 것이 좋습니다 . 즉, 먼저 가장 작은 이미지를 src속성과 함께 기본 옵션으로 선언한 다음 속성 내에서 다시 선언한 다음 srcset더 큰 치수 변형을 선언합니다. 모빌 옆에 있는 남자의 일러스트 ( 큰 미리보기 ) 픽셀 로 표현되는 각 이미지 의 고유 너비 는 단위 ( "너비"의 경우)를 사용하여 표시해야 합니다 .ww Image description 복사 위의 예제 는 300, 900 및 1800픽셀의 고유 너비가 있는 쉼표로 구분된 세 개의 이미지( image-300.png, image-900.png및 )를 정의합니다. image-1800.png모바일 우선 접근 방식을 존중하기 위해 및 속성 image-300.png에 정의된 기본 이미지 입니다.srcsrcset 참고 : 속성을 사용할 때 srcset속성을 유지하는 것이 중요 src하므로 브라우저는 기본 이미지가 무엇인지 알고 속성을 지원하지 않는 브라우저에 표시되도록 해야 srcset합니다. 참고 : 고유 너비가 아닌 이미지의 장치 픽셀 비율(DPR)을 선언하여 속성 을 사용할 수도 있습니다 . srcset그러나 이 접근 방식은 여기에서 논의되지 않습니다. 사용자의 컨텍스트를 알고 있는 브라우저는 이제 srcset속성에 선언된 목록에서 로드할 이미지를 선택할 수 있습니다. 일부 이미지가 포함된 큰 폴더 옆에 있는 여성의 그림 중 하나가 강조 표시됨 ( 큰 미리보기 ) 그러나 예기치 않은 결과를 피하기 위해 브라우저가 가장 적합한 이미지를 선택하는 방법을 이해해야 합니다. 속성 내에서 srcset브라우저는 항상 뷰포트 크기에 따라 이미지를 선택합니다 . 이미지 표시 크기를 무시합니다. 결과적으로 CSS 스타일과 미디어 쿼리는 선택에 영향을 미치지 않습니다. 또한 이미지 목록을 정의할 때 모바일 및 태블릿 의 가로 방향 을 염두에 두어야 합니다 . 기본적으로(속성을 지정하지 않고 ) 브라우저는 이미지 가 뷰포트 너비의 100%size 를 차지한다고 가정하여 이미지를 선택합니다 . 브라우저는 장치의 해상도를 알고 있으므로 계산 시 장치 픽셀 비율(DPR)도 조정합니다 . 따라서 LCP 이미지를 최적화하려면 각 DPR에 대한 변형을 정의 해야 합니다 . 이러한 동작을 기반으로 뷰포트 너비에 따라 이미지를 선택하기 위해 브라우저에서 적용되는 기본 공식은 다음과 같습니다. viewportWidth x 100% x DPR 참고 : 목록에 계산과 일치하는 이미지가 없으면 브라우저는 가장 일치하는 이미지를 선택합니다. 동률인 경우 브라우저는 더 큰 이미지를 선택합니다. 이전 코드를 사용한 예제를 통해 브라우저의 동작을 설명하겠습니다. Image description 복사 ???? 라이브 보기: Codepen 데모 1 . 참고 : 브라우저 개발 도구에서 Network > Img각 뷰포트 및 DPR에 따라 브라우저에서 선택한 이미지를 보려면 탭을 엽니다. 이 데모의 이미지는 280px모든 장치에서 고정 너비로 ​​표시됩니다. 그러나 900px와이드 스크린 DPR 1에서 브라우저는 srcset속성 이미지 목록에서 다음과 같은 이미지를 검색합니다. 900px (viewport width) x 100% (viewport width occupied by the image by default) x 1 (DPR) 이 경우 브라우저는 이미지 900px와이드를 찾고 있습니다. 이 예에서 이미지의 표시 너비는 이지만 기본 너비가 인 이미지는 280px어쨌든 900px로드됩니다. 치수가 강조 표시된 cdpn.io의 스크린샷 ( 큰 미리보기 ) 이 예에서 속성 내에서 선언된 이미지가 모든 장치 srcset의 표시 너비에 맞게 조정되지 않았음을 알 수 있습니다.280px 브라우저 viewportWidth x 100% x DPR가 로드할 이미지를 선택하는 공식을 적용하는 동안 더 간단한 공식을 사용하여 srcset속성에 선언된 다양한 이미지를 생성할 수 있습니다. imageRenderedSize x DPR 첫 번째 데모 에서 DPR 1, 2, 3을 고려 하여 다음 세 이미지를 만들고 정의해야 합니다. DPR 1 : 280 x 1=> 이미지 280 pixels폭; DPR 2 : 280 x 2=> 이미지 560 pixels폭; DPR 3 : 280 x 3=> 이미지 840 pixels와이드. 마지막으로 코드를 업데이트합니다. Image description 복사 ???? 라이브 보기: Codepen 데모 2 . 여전히 업데이트된 코드는 아직 모든 장치에 대해 완전히 최적화되지 않았습니다. 실제로 뷰포트가 DPR 2인 랩톱1024px 장치 의 경우 최적의 이미지는 고유 너비 560px( imageRenderedSize x DPR= 280 x 2= 560)여야 합니다. 1024 x 100% x 2그러나 이 코드를 사용하면 브라우저는 의 이미지 , 즉 속성 2048px에 존재하지 않는 의 이미지를 로드하려고 할 것 입니다.srcset sizes속성이 이 문제를 해결하는 데 어떻게 도움이 되는지 살펴보겠습니다 . 태그 의 sizes속성 # 이 sizes속성은 개발자에게 브라우저 동작에 대한 추가 제어를 제공하여 브라우저가 이미지가 뷰포트의 100%를 차지한다고 가정하지 않도록 합니다. 이렇게 하면 최적의 이미지가 로드되고 결과적으로 LCP 메트릭이 최적화됩니다. 이미지 요소 LCP를 최적화합니다 복사 참고 : 따라서 sizes이미지가 실제로 뷰포트의 100%를 차지하는 경우 속성이 필요하지 않습니다. 속성 값을 할당하기 sizes위해 다음 접근 방식을 사용하고 결합할 수 있습니다. 예 를 들어 이미지가 반응하는 경우(예: CSS 속성이 백분율로 정의된 경우 ) 뷰포트 너비 의 백분율로 이미지 너비를 정의합니다 .sizes="50vw"width 이미지 너비를 픽셀 로 정의 sizes="500px"합니다. 하나 이상의 미디어 쿼리를 사용하여 브라우저가 다양한 뷰포트에 따라 최상의 이미지를 선택할 수 있도록 합니다 sizes="(min-width: 1024px) 800px, (min-width: 768px) 80vw, 100vw"( 예: 100vw미디어 쿼리가 적용되지 않을 때 기본값임). 코드 예제를 업데이트해 보겠습니다. Image description 복사 참고 : 이미지가 차지하는 뷰포트의 너비를 백분율로 알려면 계산 공식을 적용합니다 (imageRenderedSize / viewportWidth) x 100. 예: (280 / 320) x 100= 뷰포트 너비의 87.5%( 87.5vw). ???? 라이브 보기: Codepen 데모 3 . 이제 세 번째 데모 의 소스 코드를 사용 하여 DPR에 관계없이 브라우저에서 완벽한 이미지를 로드할 수 있습니다. 뷰포트의 디스플레이 너비 ( 280px뷰포트의 320px87.5%). 그리고 480px뷰포트가 최소 768px. 이 단계에서 태그와 태그의 srcset속성 sizes덕분 에 LCP 이미지의 통합이 제대로 이루어졌다면 LCP 리소스 로드 시간 의 최적화 가 최적일 것입니다. 참고 : 여기서는 주로 사용자의 장치에 따라 LCP 이미지 크기를 적절하게 조정하는 데 중점을 두었습니다. LCP 점수와 "리소스 로드 시간" 하위 부분이 실제로 최적이 되려면 최신 이미지 형식 을 사용하여 이미지를 압축하거나 먼 미래의 캐시 만료 헤더를 설정하거나 CDN을 사용하여 네트워크 거리를 줄이는 것도 고려할 수 있습니다. 참고 : LCP 이미지가 잘 최적화되고 태그 내에 잘 통합되더라도 페이지에 JavaScript 파일과 같은 렌더링 차단 리소스가 포함되어 있으면 이것만으로는 충분하지 않습니다. 불필요한 요소 렌더링 지연을 제거하는 방법을 보려면 Philip Walton의 이 강연 을 참조 하십시오. 이제 로딩 시간을 줄여 LCP 점수를 더욱 최적화하는 방법을 살펴보겠습니다. jQuery, Angular, React 및 Vue용으로 기본적으로 구축된 JavaScript UI 라이브러리입니다. 빠르고 현대적인 UI를 구축하기 위한 일관된 API 및 테마. 무료 평가판 시작 LCP 리소스 로드 지연 하위 파트 # 개선 이 섹션에서는 가능한 한 빨리 LCP 이미지를 로드하는 방법을 알아보기 위해 이전에 사용된 코드 예제를 완성할 것입니다. LCP 이미지 요소를 레이지 로드하지 마십시오 . # 사용자가 웹 사이트를 방문하기 위해 인터넷을 탐색할 때 LCP 이미지의 로딩은 기본 레이지 로딩 또는 JavaScript 라이브러리에 의해 적용되는지 여부에 관계없이 레이지 로딩 기술에 의해 지연되는 경우가 많습니다. 그러나 이 로딩 지연 이 LCP 시간 계산에 포함 된다는 점에 유의해야 합니다 . 예를 들어 지연 로딩 JavaScript 라이브러리를 사용하는 경우 최종 이미지를 로드하려면 먼저 스크립트를 로드해야 합니다. 이 추가 단계로 인해 LCP 리소스 로드가 상당히 지연됩니다. 즉, LCP 이미지를 지연 로딩하면 웹 페이지의 LCP 점수에 불이익을 줍니다. 마찬가지로 프로그레시브 로딩 또는 LQIP( Low-Quality Image Placeholder )는 이 글을 쓰는 시점에 Google에서 LCP로 고려하지 않았습니다. 그러나 LQIP에 대한 논의가 진행 중이므로 향후 상황이 바뀔 수 있습니다. 우선 힌트 사용 # 우리는 LCP 이미지가 지연 로드되어서는 안 된다는 것을 방금 보았습니다. 하지만 어떻게 로딩의 우선순위를 정할 수 있을까요? 페이지의 리소스를 관리하기 위해 브라우저는 기본적으로 리소스 유형별로 다른 매개변수 중에서 정의된 우선 순위에 따라 로드 순서를 적용합니다. 이미지는 렌더링 차단 리소스보다 우선 순위가 낮습니다. 더 낮은 우선 순위로 리소스를 가져온다는 의미 외에도 브라우저가 더 중요하고 종종 렌더링을 차단하는 리소스에 집중할 수 있도록 초기에 "낮은" 리소스를 의도적으로 지연시키기 때문에 가져오기가 실제로 지연된다는 의미이기도 합니다. 즉, LCP 이미지 가 지연되지 않고 HTML 문서를 수신하는 즉시 로드할 수 있도록 브라우저의 기본 로드 순서와 영웅 이미지에 대한 동작을 변경해야 합니다 . 이 fetchpriority="high"로딩 우선 순위를 수정할 수 있게 해주는 속성입니다. 이미지 요소 LCP를 최적화합니다 복사 코드 예제를 업데이트해 보겠습니다. 태그 에 속성을 추가하기만 하면 브라우저가 자동으로 속성 에 선언된 소스를 기반으로 우선 순위를 지정하기 위한 이미지의 올바른 버전을 결정 합니다.srcset 이미지 요소 LCP를 최적화합니다 복사 ???? 최종 데모 보기 . 참고 : 이 fetchpriority속성 은 요소 의 태그 에서도 작동합니다. 현재로서는 주로 Chromium과 호환되지만 2023년 초에는 Firefox에서 지원될 예정 입니다. 그러나 단점 없이 속성을 계속 사용할 수 있습니다. fetchpriority속성을 지원하지 않는 브라우저에서는 속성이 무시됩니다. 데모에서 볼 수 있듯이 태그 src와 srcset속성은 초기 HTML 소스 코드에 있습니다. 이는 브라우저의 사전 로드 스캐너가 LCP 리소스를 검색할 수 있으므로 여기에서 LCP 리소스를 사전 로드할 필요가 없음을 의미합니다. 참고 : 반응형 이미지의 사전 로드는 Safari의 경우와 같이 모든 브라우저에서 지원되지 않습니다 . 지원하지 않는 브라우저가 쓸모 없는 이미지를 요청하지 않도록 요소 에 특성 을 사용하지 않도록 하세요 . 이 항목에 대해 자세히 알아보고 LCP 리소스를 미리 로드해야 하는 경우를 보려면 이 문서 를 읽으십시오.href 320px이 마지막 데모에서 브라우저는 이제 뷰포트가 의 장치 및 뷰포트가 의 장치에 필요한 최적의 이미지를 알 768px수 있을 뿐만 아니라 다른 리소스와 비교하여 로드 우선순위를 지정할 수 있습니다. 따라서 개발자로서 이 문서에 설명된 모든 사항은 웹 사이트의 LCP 점수를 향상시키는 데 도움이 됩니다. LCP 점수가 좋은 모바일 옆에 있는 남자의 그림이 녹색으로 강조 표시됨 ( 큰 미리보기 ) Smashing Magazine으로 광고하기 결론 # 결론적으로 다음은 LCP 이미지를 최적화하는 데 필요한 단계를 요약한 것입니다. 웹 사이트의 페이지 템플릿이 정의되면 공식 에 따라 각 장치 및 각 DPR 에 필요한 모든 이미지를 생성 하고 저장합니다 . 이 단계를 단순화하기 위해 TwicPics API를 사용하여 고품질 원본 이미지에서 다양한 차원의 여러 버전을 생성할 수 있습니다.imageRenderedSize x DPR 태그 srcset속성을 사용하여 1단계에서 정의한 이미지 목록을 포함하고 모바일 우선 접근 방식을 따릅니다( 속성 내에 기본 이미지를 입력해야 함).src 필요에 따라 미디어 쿼리 와 결합된 태그 의 sizes속성을 사용하여 다양한 장치 컨텍스트에 따라 이미지가 차지하는 디스플레이 너비를 브라우저에 알립니다. 이미지가 반응형 이면 수식을 사용하여 너비를 뷰포트 너비 의 백분율로 정의합니다 (imageRenderedSize / viewportWidth) x 100. 이미지가 뷰포트 너비 범위에 대해 고정된 경우 너비를 픽셀 단위 로 정의하기만 하면 됩니다. LCP 점수를 더욱 향상시키려면 속성과 함께 우선 순위 힌트를 사용 fetchpriority="high"하여 LCP 이미지 로드의 우선 순위를 지정하십시오. 그리고 LCP 이미지 리소스를 지연 로드하지 않도록 주의하세요!