새로 알게 된 부분만 정리 ✍️
<img>
태그는 srcset
이나 sizes
와 같은 유용한 최적화 속성을 제공함으로써 더 빠른 페이지 로드를 도와줌
srcset
속성을 사용하면 사용자들의 단말기 화면 너비에 따라서 서로 다른 이미지를 제공srcset
로 반응형 이미지 생성 / sizes
로 비율 조정aspect-ratio
를 잡는다.aspect-ratio
를 사용한다.뛰어난 압축 및 품질을 위해 WebP와 같은 차세대 형식을 이용하는 것
<source>
와 함께 <picture>
태그를 사용하면 이전 버전과 호환이 되어 모든 브라우저에서 올바르게 최적화된 이미지 형식을 표시할 수 있다.참고🔗
브라우저 이미지 최적화 - WebP AVIF JPEG
호환 이슈
GIF | JPEG | PNG | WEBP | HEIC | AVIF |
---|---|---|---|---|---|
1987 | 1992 | 1996 | 2010 | 2015 | 2018 |
<picture>
태그<image>
요소의 다중 이미지 소스를 위한 컨테이너를 정의할 때 사용
<source>
요소를 사용하고, 나머지는 무시<img>
요소는 가장 마지막에 위치: 하위 호환성, 만족하는 <source>
없을 경우alt
(alternative, 대체) 텍스트가 중요한 만큼 장식용으로만 사용된 이미지를 표시해두는 것도 중요하다. 콘텐츠 일부가 아니고 페이지의 외관을 향상시키기 위해서만 존재하는 배경 이미지에는 role="presentation"
값이 지정되어야 한다.
role
: 웹 접근성을 위해 위젯, 구조 및 동작에 대한 의미 정보를 전달하고 element의 확장 개념으로 좀 더 명확한 구조와 의미를 부여하는 역할을 하는 속성role="presentation", role="none"
semantic의미를 요소와 그 자식요소로부터 제거하기 위해서 사용한다. 시각적으로 게시하는 용도의 요소에 적용. fetchpriority="high"
loading="lazy"
decoding="async"
fetchpriority="low"
<img loading=lazy>
: 브러우저에서 직접 지원하는 지연 로딩[React] 성능최적화 2편 - 이미지 사이즈 최적화1(feat. firebase)
browser-image-compression
(브라우저 이미지 압축)
imageCompression(file: File, options): Promise<File>
File
이어도 Blob
으로 리턴되기 때문에 File
변환 추가 코드가 필요File
의 특성인 name
, lastModified
속성은 가진 Blob
객체)new File([Blob], name, options)
getDataUrlFromFile
메소드를 이용해 base64인코딩 방식의 DataUrl을 얻을 수 있음.imageCompression.getDataUrlFromFile(compressedFile)
squoosh.app (구글)
(JPG 인코더 : 모질라의 MozJpeg vs 구글의 guetzli)
#public
#src
#public
https://velog.io/@ingdol2/React-image-경로-설정하기
이미지 마크업, img vs background-image 딱 정해드립니다.
https://codingapple.com/forums/topic/백그라운드-이미지-관련/
img
background
🧐 꾸밈 요소는 img가 아닌 background가 적절해서 public이 아닌 src에 위치시켰는데, lighthouse에서 정적 에셋으로 관리하도록 권장💦