HTML 및 Markdown에서 이미지 로드 최적화
14247 단어 htmljavascripttutorialwebdev
본문에서, 나는 어떻게 나의 사이트에서 이 모든 것을 실현할 것인가를 토론할 것이다.뭐가 효과가 있어, 뭐가 효과가 없어.
HTML 형식의 이미지
HTML 설정을 사용한 이미지부터 시작합니다.
나는 이렇게 했다.
<img
src="/img/sample_image.png?nf_resize=fit&w=250"
loading="lazy"
alt=". . ."
/>
Netlify 대형 미디어에서 최적화된 이미지 로드
나는 폭이 250픽셀로 줄어들고 높이가 비례하는 그림을 불러오기 위해
?nf_resize&w=250
를 추가했다.내가 왜 선택했을까
250px
?렌더링할 때 특정 이미지의 최대 너비를 확인하고 그에 따라 너비를 설정합니다.내 사이트에서, 이미지는 보통 다른 크기로 표시된다.데스크톱 브라우저의 폭은 고정되어 있습니다.모바일 기기에서는 화면 너비와 연결되어 있기 때문에
30px
에서 236px
까지 (이와 유사하게) 범위가 넓을 수 있기 때문에, 나는 단지 250px
을 선택할 뿐이다. 왜냐하면 이것은 영원히 이것보다 크지 않기 때문이다.Netlify Large Media에서 이미지 요청에 따라 지정할 수 있는 추가 매개 변수를 docs에서 찾을 수 있습니다.
로드 지연
추가
loading="lazy"
는 브라우저가 이미지가 뷰포트에 가까울 때만 이미지를 로드해야 함을 나타냅니다.처음에 설정하지 않았을 때 페이지는 다음과 같이 로드됩니다. 페이지가 열릴 때 브라우저는 첫 번째 HTML을 그리고 현재 페이지에 사용된 모든 이미지를 로드할 때까지 로드합니다.만약 페이지에 많은 그림이 포함되어 있다면, 이것은 시간이 필요하다.때로는 많다.
설정
loading="lazy"
시 브라우저는 페이지 보기 섹션과 1250px
-2500px
아래doc 영역의 이미지만 로드합니다.적어도 크롬 브라우저에서는 이렇게 작동해야 한다.따라서, 네, 그것은 페이지의 마운트 속도를 크게 높일 수 있습니다. 왜냐하면 필요에 따라 앞의 세 장의 그림을 불러온 다음에 다른 그림을 불러오는 것이 한 번에 더 많은 그림을 불러오는 것보다 빠르기 때문입니다.😉.
그러나 공식 제안here에 따라 페이지의 첫 번째 그림에 이 옵션을 설정하지 않았습니다.이 그림들은 어쨌든 열린 페이지에 불러올 것이다🙂.
시도 중
srcset
및 sizes
응답 이미지를 로드하려면 Mozilla의 다음 코드를 사용하십시오.<img srcset="path_to_image.png?nf_resize=fit&w=180 180w,
path_to_image.png?nf_resize=fit&w=250 250w"
sizes="(max-width: 400px) 180px,
250px"
src="path_to_image.png?nf_resize=fit&w=250"
alt=". . ."
/>
코드로 볼 때, 이것은 폭이 400픽셀에 달하는 화면에서 브라우저가 다음과 같은 매개 변수를 가진 이미지를 요청해야 한다는 것을 의미한다. ?nf_resize=fit&w=180 180w
따라서 폭은 180픽셀입니다.너비가 400픽셀이 넘는 화면에서는 다음 매개 변수가 있는 이미지를 로드해야 합니다. ?nf_resize=fit&w=250 250w
.그래서 너비는 250화소일 거예요.근데 다 소용없어.
(뷰포트) 백분율
sizes
에 vw
을 지정하면 모든 것이 정상적이며 나중에 태그 이미지가 표시됩니다.그러나 px
규격에는 아무 소용이 없다.이미지는 항상 다음 매개 변수를 로드합니다. ?nf_resize=fit&w=250 250w
🤷♂️.한동안 놀다가 나는 내가
?nf_resize=fit&w=250 250w
매개 변수만 사용할 수 있다는 것을 알게 되었다.예전처럼 이렇게:<img
src="/img/sample_image.png?nf_resize=fit&w=250"
loading="lazy"
alt=". . ."
/>
나의 이미지는 모바일 기기에서 매우 민감해져서 서로 다른 레이아웃의 정확성을 찾아내는 것은 상당히 고통스러운 일이다. (적어도 나에게는)나는 그것들의 크기를 비교하기 위해 몇 개의 사진을 다운로드했다.
vw
하나는 114KB이고, 그중 250px
하나는 63,3KB이다.두 배의 차이를 보였지만, 180px
이미지로 페이지 속도 테스트를 실행한 후, 나는 아무런 개선도 보지 못했다🤷♂️.가격 인하에서 최적화 이미지 로드
블로그 게시물에 대한 모든 최적화는 좀 복잡하다.
나의 모든 게시물은 가격 인하법으로 작성되었고 markdown-it 플러그인을 통해 HTML로 변환되었다.
Markdown 언어는 그림에 대한 설명 방식에 대해 약간의 규범과 제한이 있다.다음은 이미지 사양의 구조입니다.
180px
.우리가 구체적으로 설명할 수 있는 일이 그렇게 많지 않다.다행히도, 우리는 추가 ![Alt text people will see if picture can’t be seen](https://link.of/image “Title to show under the image”)
플러그인을 통해 태그를 HTML로 변환하는 방법을 대량으로 수정할 수 있습니다.게으른 그림
우선, 표시를 통해 렌더링된 모든 이미지에
markdown-it-
추가할 플러그인을 찾았고 추가했습니다.여기 있습니다. markdown-it-image-lazy-loading!이미지에 URL 매개 변수를 추가하여 최적화된 이미지를 로드할 계획이라면 추가하기 전에 잠시 기다려 주십시오.내가 다음에 보여줄 플러그인만 사용할 수 있고, 이 플러그인을 설치할 필요가 없다.다음 섹션을 계속합니다.
설정
loading=”lazy”
후 대량의 그림을 포함하는 블로그 페이지의 마운트 속도가 대폭 향상되었다.이 속성은 반드시 갖추어야 한다.테이블에서 결과를 봅니다.loading="lazy"
및 srcset
이미지 포함그리고 나는 markdown-it-responsive 패키지를 추가하려고 시도했다. 이 패키지는 모든 이미지에
sizes
와 srcset
속성을 추가해야 하는데 이것은 전혀 작용하지 않는다.HTML 렌더링 오류와 페이지 끊기☹️.추가 검색을 통해 이 플러그인을 찾았습니다: markdown-it-modify-token.검사를 한 후에, 나는 그것이 아주 잘 일할 것이라는 것을 알았다. 나는 그것으로 내가 필요로 하는 모든 것을 할 수 있다.
한동안 이 비밀번호가 탄생했다.
modifyToken: function(token, env) {
switch (token.type) {
case "image":
token.attrObj.srcset =
`${token.attrObj.src}?nf_resize=fit&w=300 300w, ` +
`${token.attrObj.src}?nf_resize=fit&w=600 600w`;
token.attrObj.src = token.attrObj.src + "?nf_resize=fit&w=600";
break;
}
},
이렇게 지정sizes
을 통해 나는 브라우저에 다음과 같이 말했다. 여기는 두 개의 이미지가 있는데 너비는 각각 srcset
와 300px
이고 100%의 뷰포트 너비에 따라 어떤 이미지를 불러올지 스스로 결정한다.먼저 다음과 같이
600px
속성을 추가했습니다.token.attrObj.sizes = “100vw”;
그러나 크리스 코이어article의 글을 읽은 뒤 삭제했다.이것은 브라우저의 기본값이기 때문에 따로 지정할 필요가 없습니다.이것은 실행할 수 있지만, 이런 행위는 좀 이상하다. (적어도 나에게는)화면 너비가
size
인 경우 브라우저는 너비가 200px
인 이미지를 로드하지만 화면 너비가 300px
인 경우 너비가 250px
인 이미지를 로드합니다... 이해가 되지 않습니다.😐. 600px
에서 다시 지정하면sizes
이미지만 로드됩니다.다음은 제가 시도한 코드입니다.
token.attrObj.sizes = "(max-width: 400px) 300px, 600px"
네, 브라우저가 언제 무엇을 불러올지 결정하도록 크기를 px
로 남겨 두겠습니다.브라우저가 스마트했으면 좋겠어요.앞서 쓴 바와 같이 플러그인의 사용법을 삭제할 수 있습니다.
modifyToken: function(token, env) {
}
다음만 추가하면 됩니다.token.attrObj.loading = "lazy";
600px
:switch (token.type) {
case "image":
token.attrObj.srcset =
`${token.attrObj.src}?nf_resize=fit&w=300 300w, ` +
`${token.attrObj.src}?nf_resize=fit&w=600 600w`;
token.attrObj.src = token.attrObj.src + "?nf_resize=fit&w=600";
// This will make all images loading lazy
token.attrObj.loading = "lazy";
break;
}
참고로, 항상 크기의 그림을 불러오고 싶으면 100vw
setter를 삭제하십시오.보아하니 이렇다.switch (token.type) {
case "image":
token.attrObj.src = token.attrObj.src + "?nf_resize=fit&w=600";
// token.attrObj.loading = "lazy";
break;
}
기억하는 바와 같이, 마운트 지연 없이 첫 번째 그림을 만드는 것이 좋습니다. 하지만Markdown의 그림을 사용하는 것은 좀 어렵습니다.가격 인하를 위해 별도의 논리를 써야 하는데, 시간 투자는 나에게 정말 가치가 없다.네, 구글의 말대로 실적이 소폭 하락했지만 회사를 파산시키지 않을 것이라고 생각합니다.이것이 바로 내가 나의 사이트에 이미지를 더 잘 불러오기 위해 한 모든 것이다.에서 페이지 속도 향상을 확인할 수 있습니다.그것들은 매우 튼튼하다😉.
제 블로그 창작을 계속 공유하는 과정에서 저는 더 많은 비하인드를 보고 싶습니다.
그나저나 왜
case "image":
와srcset
만 함께 사용할 수 있는지 아시면 댓글로 공유해 주세요.나 진짜 관심 있어!
Reference
이 문제에 관하여(HTML 및 Markdown에서 이미지 로드 최적화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nikitagoncharuk/optimized-image-loading-in-html-and-markdown-2dnp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)