웹 성능에 대한 초보자 가이드: 이미지 최적화

이미지를 최적화하여 웹 성능과 사이트 속도를 개선하는 방법



목차



  • Introduction
  • Previous Site Speed Strategies


  • How to Optimize Images
  • Resize & Compress Images
  • Lazy-Load Images
  • Set Width & Height Attributes
  • Use the Picture Element

  • Conclusion

  • 소개

    The past year I've really made an effort to dig into site speed and optimizing sites based on audits from Google Page Speed Insights because of the now-released Core Web Vitals. Even if this didn't affect ranking, it's good practice to minimize as much data being loaded as possible and to provide the user with as smooth an experience as you can.

    I started off by taking the Web Performance course by Scott Jehl , 이것은 완전히 새로운 것을 접하는 경우 훌륭한 출발점입니다. 이 과정은 모든 단계, 모든 측정항목의 의미, 사이트 측정 방법을 설명한 다음 각 측면을 개선하는 방법에 대해 자세히 설명합니다. 이 주제에 대한 철저한 입문서를 원하신다면 이 과정을 적극 추천합니다.

    이전 사이트 속도 전략

    Before researching newer methods, the predominant strategy was to minimize the entire page size, which is almost no longer relevant as a metric. Total page size doesn't tell you what the user is experiencing as they browse, and putting a necessary gallery on a page shouldn't doom your rankings. Granted, a very large page size may indicate images need compression, but not always. Now the strategy is concerned with loading items only when the user needs them, versus years before where the consensus was to reduce the total number of items loaded on the page overall.

    이미지를 최적화하는 방법

    I've outlined the steps I've taken to optimize images on sites based on recommendations from web experts and from personal experience. These are relatively easy to implement and are a good starting point for site optimization.

    이미지 크기 조정 및 압축

    This has been relevant for years now, but don't load a giant 1000x800 image for a 100x100 thumbnail. Sometimes I load a site and it's very obvious that a small thumbnail image above the fold is loading the full-sized image because it takes 2-3 seconds to download. That large image is loading extra bytes that serve no advantage to users because they will not be able to see the full details.

    Getting the sizing perfect can be difficult if you're using a CMS and the same image is used in different situations, but you want to use the smallest image needed when possible. I use two free tools in combination for bulk image editing:

  • Bulk Resize Photos : 여러 이미지의 끌어서 놓기, jpg의 너비로의 변환 및 설정 최대 허용 Photoshop에서 수행해야 했던 다른 모든 작업. 여기서는 압축 옵션을 사용하지 않고 크기만 조정합니다.

  • Image Optim : Mac만 해당, 사용자 정의 압축 설정을 지정하고 무거운 메타데이터를 제거할 수 있습니다. 여기의 압축 설정이 훨씬 더 포괄적이기 때문에 대량 크기 조정에서 이미지 크기를 조정한 후에 이것을 사용합니다.

  • 지연 로드 이미지

    I had been waiting for this attribute for years, and now you can safely use it in all the major browsers. If the attribute is not compatible in the browser, then it just doesn't do anything:

    <img src="sample.jpg" loading="lazy" alt="Sample" />

    This tells the browser not to load the image until it is in the user's viewport, meaning if you have a gallery that is well below the fold, you won't have to worry about those images clogging up the LCP (largest contentful paint). Keep one thing in mind however:

    Do not use the loading="lazy" attribute for images that are definitely ABOVE the fold

    If the image needs to be visible immediately to the user, do not use this attribute, as this may negatively impact LCP or CLS (cumulative layout shift).


    호환 가능한 플러그인

    이미지뿐만 아니라 모든(JavaScript 지원) 브라우저에서 지연 로드를 보장하려면 몇 년 전에 Vanilla Lazyload을 성공적으로 사용했지만 data-src 속성 사용에 의존하므로 다음을 얻을 수 있습니다. src 속성도 설정하지 않으면 W3C 유효성 검사 오류가 발생합니다. 그러나 src를 실제 이미지로 설정하고 싶지는 않습니다. 이렇게 하면 플러그인 사용의 요점이 무효화되므로 즉시 data-src로 대체되는 1x1 픽셀 "이미지"로 설정하십시오. 이미지가 보기로 스크롤됩니다.

    src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"

    이미지 너비 및 높이 속성 설정

    Both these attributes surprisingly have a long, complex history. When I built web sites as a kid, CSS was not standard yet, and you would have to set a width and height on image attributes. Then when I returned to web development as an adult, these attributes were discarded because they interfered especially with art direction, where the aspect ratio of an image changed going from desktop to mobile.

    <img src="logo.jpg" alt="" loading="lazy" width="200" height="300">
    

    And here we are now, with the recommendation to set both these attributes back again to reduce CLS (cumulative layout shift) because the browser considers these values a ratio, rather than exact pixels. If the page is loading and the width and height are not set, then the browser has no idea what dimensions your image is, and the layout will shift considerably once the image finishes loading, which is disruptive to the user.

    If you have images that change aspect ratios depending on the screen size, then you will have to use either the image srcset attribute or the <picture> element in order to serve different images based on the screen size. I would also make sure that the CSS rules don't accidentally stretch or warp the images depending on how you have your rules set up.

    Picture 요소를 사용하여 WEBP 또는 기타 최신 형식 제공

    Even with resizing and compressing images, if you are using either JPGs or PNGs, these files will still be larger than WEBP images, one of the newer, widely-accepted image formats. I've noticed about a 30% decrease in image size once converting to WEBP, but I still make sure to serve the original image format for maximum browser compatibility.

    I use Squoosh 개별 이미지를 WEBP로 변환합니다. 나는 아직 좋은 무료 대량 도구를 찾지 못했고 여전히 이미지가 압축된 후에도 여전히 잘 보이도록 설정을 엉망으로 만들어야 한다는 것을 알게 되었습니다.

    <picture>
       <source srcset="image.webp" type="image/webp">
       <source srcset="image.jpg" type="image/jpeg">
       <img src="image.jpg" alt="Image 1" loading="lazy">
    </picture>
    


    여기에서 브라우저는 호환되는 브라우저의 WEBP 이미지를 로드하고 그렇지 않은 경우 JPG 이미지를 제공합니다.


    배경 이미지는 어떻습니까?

    CSS를 통해 WEBP 배경 이미지를 로드하는 경우 <picture> 요소가 HTML 이미지에서만 작동하기 때문에 JPG로 폴백하는 쉬운 방법이 없습니다. 나는 그것을 볼 수 있는 사람들을 위해 WEBP를 제공하도록 서버를 설정하거나 규칙을 다시 작성하는 것에 대해 읽었고, 볼 수 없는 사람들을 위해 자동으로 이전 버전을 로드했지만 아직 이 방법을 시도하지 않았습니다. 서버에 있는 모든 이미지에 대해 2가지 버전이 있어야 하며, 서버가 이미지 전환을 처리하기 때문에 <picture> 요소 메서드를 대체합니다.

    스스로에게 묻기 시작한 질문은 이전 브라우저에서 배경 이미지를 제공하는 것이 얼마나 중요한지 입니다. 이미지가 순전히 장식적인 경우 이전 브라우저에 표시되어야 합니까? 점진적 향상의 일부로 최신 브라우저에서만 이미지를 로드할 수 있습니까? 이것은 내가 아직 알아내고 있는 것입니다. 저는 제 작업에서 너무 오랫동안 구형 브라우저를 지원해야 했습니다. 단지 지원만 하는 것이 아니라 최신 브라우저와 정확히 동일하게 보이는지 확인해야 합니다. 디자인, 이것이 모두에게 정말 도움이 되나요? 최근에 나는 "아니오"로 기울고 있습니다.

    결론

    I hope you are able to get started with web performance and site optimization with images. This can get tricky once images are served dynamically and art direction is considered, but these are simple steps to get started to help make web sites load more efficiently for everyone.

    좋은 웹페이지 즐겨찾기