패스트캠퍼스 강의를 정리한 내용입니다.
"The RED : 견고한 UI 설계를 위한 마크업 가이드 by 정찬명"
*LCP를 개선하려면..
이미지를 예로 들면, 이미지가 로드되는 것 뿐만 아닌 로드 되기까지의 모든 과정의 성능 문제를 해결해야 함
참고 : https://web.dev/lcp/
구글 lighthouse 활용
*lighthouse 다운로드 및 실행 방법은 아래 링크 참고
https://velog.io/@uhye/CSS-Optimization#google-lighthouse
성능 확인
성능 개선을 위해 해결할 항목 확인
→ Largest Contentful Paint element
Vanilla Script란?
플러그인이나 라이브러리를 사용하지 않은 순수 자바스크립트
*아래 사이트에서 jQuery나 loash 대신 사용 가능한 'Vanilla Script' 확인 가능
https://youmightnotneed.com/
CSS는 페이지 렌더링을 차단하는 리소스인데
미사용 CSS 까지 있다면, 브라우저가 스타일을 계산하는데 잠재적으로 더 많은 시간을 소비하게 만들기 때문에 미사용 CSS 제거
nomalize.css, reset.css 사용 자제
<link rel="stylesheet">
<link rel="preload">
<head>
<link rel="stylesheet" href="*.css"> 👎
<!-- css의 리소스를 로딩하고 해석하는 동안 웹 페이지의 렌더링이 차단되는 방법 -->
</head>
<head>
<link rel="preconnect" href="https://fonts.gstatic.com"> 👍
<!-- preconnect : href에 적힌 URL을 미리 연결하는 기능 -->
<link rel="preload" as="style" href="*.css" onload="this.onload=null;this.rel='stylesheet'"> 👍
<!--
preload : 웹페이지 렌더링을 하는 동시에 CSS 파일을 다운로드 함
onload : css 다운로드가 끝나면 preload 값을 stylesheet로 변경 후 stylesheet를 웹페이지에 적용 (지연 적용)
-->
</head>
*Hero Image란?
웹페이지 상단에 위치한 큰 배너와 같이 시선을 사로잡는 이미지
시각적으로 두드러지는 웹페이지의 핵심 이미지
<head> 👍👍👍
<link
rel="preload" as="image"
media="(max-width:640px)" href="small.avif">
<link
rel="preload" as="image"
media="(min-width:641px)" href="large.avif">
</head>
Image type 또는 Viewport width를 감지해서 성능 개선하기
<!-- UNOPTIMIZED HERO IMAGE -->
<img src="large.jpg" alt> 👎
<!-- OPTIMIZED HERO IMAGE -->
<picture> 👍👍👍
<!-- AVIF && SMALL SCREEN -->
<source srcset="small.avif" type="image/avif" media="(max-width:640px)">
<!-- AVIF && LARGE SCREEN -->
<source srcset="large.avif" type="image/avif">
<!-- WEBP && SMALL SCREEN -->
<source srcset="small.webp" type="image/webp" media="(max-width:640px)">
<!-- WEBP && LARGE SCREEN -->
<source srcset="large.webp" type="image/webp">
<!-- FALLBACK -->
<img src="small.jpg" alt>
</picture>
loading="lazy" , decoding="async" 속성을 활용한 이미지 지연 로딩
<img loading="lazy">
→ 웹페이지에서 Viewport 내에서만 이미지를 로딩
→ Viewport 높이의 1~2배 지점까지 근접하면 로딩됨
<img decoding="async">
→ decoding은 암호화 했던 이미지를 복호화 하는 방법
→ 복호화 방법으로 async라는 값을 제공하면, 화면에 다른 요소를 렌더링 하는 것을 중단하지 않고 다른 요소를 먼저 표시 후 이미지를 뒤늦게 화면에 표시
→ 이미지 디코딩(복호화)을 병렬 처리하여 디코딩을 지연시켜 다른 콘텐츠의 표시 속도가 빨라짐
Loading / Decoding 속성은 img 태그에서만 사용
<!-- UNOPTIMIZED IMAGE -->
<img src="example.jpg" alt>
<!-- OPTIMIZED IMAGE -->
<img
src="example.jpg"
loading="lazy" 👍
decoding="async" 👍
alt>