Slide 1

Slide 1 text

PICTURE PERFECT A D D Y O S M A N I MODERN IMAGE OPTIMIZATION

Slide 2

Slide 2 text

Video by KoolShooters from Pexels PERFECT PICTURES ON THE WEB

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Optimizing images. How hard could it be?

Slide 5

Slide 5 text

Video by fauxels from Pexels IMAGES ARE KEY

Slide 6

Slide 6 text

Image optimization is an evolving topic.

Slide 7

Slide 7 text

Major changes in the image landscape • WebP support in all modern browsers • AVIF image decode support landing in Chrome, Firefox and Safari • JPEGXL decoding behind a fl ag in Chrome • Lazy-loading images in Chrome, FF, Safari. A default in WordPress • Compute img/video aspect ratio from width/height attributes • FF support for preload, Chrome: imagesrcset and imagesizes on link rel=preload • width/height on elements for • and more! 2020-2022

Slide 8

Slide 8 text

Fidelity vs. File-size Lossy vs. lossless Video by cottonbro from Pexels COMPRESSION

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

ORIGINAL PNG - 700KB

Slide 11

Slide 11 text

Original - 700KB Squoosh.app

Slide 12

Slide 12 text

MOZJPEG - Q75 - 53KB

Slide 13

Slide 13 text

WEBP - Q75 - 50.6KB

Slide 14

Slide 14 text

AVIF - Q30 - 28.8KB

Slide 15

Slide 15 text

AVIF - Q38 - 46.9KB

Slide 16

Slide 16 text

AVIF - LOSSLESS - 610KB

Slide 17

Slide 17 text

WEBP - LOSSLESS - 535KB

Slide 18

Slide 18 text

Avid (4:4:4) @ 19.8KB THE 20KB CHALLENGE

Slide 19

Slide 19 text

JPEG - Q18 - 20KB 4:4:4

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

8x8 BLOCKS HALOS DETAIL LOSS https://goo.gle/2Wsr16A JPEG DISTORTIONS

Slide 22

Slide 22 text

WEBP - Q24 - 20KB NO LOSSY 4:4:4

Slide 23

Slide 23 text

AVIF - Q25 - 19.8KB 4:4:4

Slide 24

Slide 24 text

Modern image formats • AVIF is a solid fi rst choice if lossy, low- fi delity compression is acceptable and saving bandwidth is the number one priority. Assuming encode/decode speeds meet your needs. • WebP is more widely supported and may be used for rendering regular images where advanced features like wide color gamut or text overlays are not required. • AVIF may not be able to compress non-photographic images as well as PNG. Compression savings from WebP may be lower than JPEG for high- fi delity lossy compression. • If both AVIF and WebP are not viable options, consider evaluating MozJPEG (optimize JPEG images), OxiPNG (non-photographic images), or JPEG 2000 (lossy or lossless photographic images) • Progressive enhancement via lets the browser choose the fi rst supported format in the order of preference. This implementation is considerably simpli fi ed when using image CDN’s where the Accept Header and content negotiation (e.g. auto-format and quality) can serve the best image.

Slide 25

Slide 25 text

SPEED Encode vs. Decode Static vs. Dynamic Loading

Slide 26

Slide 26 text

The modern element A delicious donut Lazy-load Async decode SET DIMENSIONS TO AVOID LAYOUT SHIFTS Placeholder

Slide 27

Slide 27 text

50% of the brain is involved in visual processing Time to get the sense of a visual scene 0.01s How much we recall of what we see or do vs. 20% of what we read. 80% Increase in willingness to read due to color visuals. 80% Neuroscience How much audiences more likely to be persuaded by a talk with visuals vs. a purely verbal one 17% To process a symbol and 100ms to attach meaning to it. 150ms Sources: goo.gle/imgsci

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

There are many ways to load an image. https://goo.gle/3eLzPux

Slide 30

Slide 30 text

MEASURE & OPTIMIZE

Slide 31

Slide 31 text

Images impact Web Vitals in a number of ways

Slide 32

Slide 32 text

Speed Metrics Changelog https://goo.gle/csmlog

Slide 33

Slide 33 text

Optimal image serving for Web Vitals • For a fast Largest Contentful Paint • Request your key hero image early • Use , srcset + e ff i cient modern image formats • Avoid wasting pixels (compress, don't serve overly high DPR images) • Lazy-load o ff screen images (reduce network contention for key resources) • For a low Cumulative Layout Shift • Set dimensions (width, height) on your images • Use CSS aspect-ratio or aspect-ratio boxes to reserve space otherwise • For a low impact First Input Delay • Avoid images causing network contention with other critical resources like CSS and JS.

Slide 34

Slide 34 text

Largest Contentful Paint Element Lighthouse Audit function getLCPDebugTarget(entries) { const lastEntry = entries[entries.length - 1]; return lastEntry.element; } LCP API (RUM) web.dev/debug-web-vitals-in-the- fi eld/ User devices have di ff erent screen resolutions, which results in di ff erent page layouts and thus di ff erent elements being visible within the viewport. Content may be personalized for the current user, so the LCP candidate element could vary wildly from user to user. 🔬 ⛰

Slide 35

Slide 35 text

https://twitter.com/TimVereecke/status/1372210487191085063 https://twitter.com/OliverJAsh/status/1441095716227543042

Slide 36

Slide 36 text

Images & Developer tooling Identify images that could be served in a more modern format

Slide 37

Slide 37 text

Serving Modern Image Formats Cute puppy

Slide 38

Slide 38 text

Picking an image format • Compression • Speed • Limitations • Animation • Features • Tooling

Slide 39

Slide 39 text

JPEG 80 vs AVIF 70 vs WEBP 85 54% size reduction vs JPEG 26% size reduction vs JPEG https://www.industrialempathy.com/posts/avif-webp-quality-settings/

Slide 40

Slide 40 text

When lossy compression is good enough, AVIF can deliver significantly better results than the existing web codecs, including WebP.

Slide 41

Slide 41 text

Picking an image format Speed & Features

Slide 42

Slide 42 text

Image Optimization Tooling • Squoosh • Imagemin • ImageMagick • Sharp / Jimp • Thumbor • ImageOptim • XnConvert • Image CDNs

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

Images & Developer tooling Image format debugging

Slide 48

Slide 48 text

Identify images that can be better sized Properly size images

Slide 49

Slide 49 text

Images without dimensions

Slide 50

Slide 50 text

Layout Shifts from images without dimensions Lighthouse audit function getCLSDebugTarget(entries) { const largestShift = entries.reduce(( return a && a.value > b.value ? a : }); if (largestShift && largestShift.sour const largestSource = largestShift. return a.node && a.previousRect.w b.previousRect.width * b.prev }); if (largestSource) { return largestSource.node; } } PerformanceObserver

Slide 51

Slide 51 text

Lots of factors determine the best image size • Many factors determine the best image size • Screen size and resolution • Viewport • Layout and responsive breakpoints • Device pixel ratio (physical resolution) • Art direction Can one size fi t all?

Slide 52

Slide 52 text

Responsive Images: srcset and sizes A delicious pink donut.

Slide 53

Slide 53 text

by width and density Responsive images

Slide 54

Slide 54 text

Device Pixel Ratio (DPR) / Pixel Density Capping Responsive images

Slide 55

Slide 55 text

Image Aspect Ratio Reserve space for responsive and lazy-loaded images Padding-top hack Mapped aspect-ratio Explicit aspect-ratio

Slide 56

Slide 56 text

Enhanced image preview in DevTools File size, rendered size, rendered aspect ratio, intrinsic size, intrinsic aspect ratio

Slide 57

Slide 57 text

Image lazy-loading Defer o ff screen images

Slide 58

Slide 58 text

Image lazy-loading Eager image fetching

Slide 59

Slide 59 text

Lazy-loading responsive images A delicious pink donut. Lazy-loading images

Slide 60

Slide 60 text

Image lazy-loading Lazy image fetching

Slide 61

Slide 61 text

Only lazy-load offscreen images

Slide 62

Slide 62 text

Image discovered late - loaded via JS LCP image preloaded

Slide 63

Slide 63 text

Preload Largest Contentful Paint image Lighthouse audit

Slide 64

Slide 64 text

Request your image early

Slide 65

Slide 65 text

https://twitter.com/patmeenan/status/1443219921522073601

Slide 66

Slide 66 text

Blurry placeholder images Approximate the fi nal image before it loads in

Slide 67

Slide 67 text

Placeholder using background-image A delicious donut Placeholder Final image

Slide 68

Slide 68 text

Video by KoolShooters from Pexels IMAGES ARE SO COMPLICATED

Slide 69

Slide 69 text

Next.js Image Component • Automatic srcsets for images • Enforced sizing to prevent layout shift • Automatic lazy-loading of o ff screen assets • Framework-speci fi c asset prioritization optimizations • Flexible layout options • Customizable loader support for any image server or CDN Features and bene fi ts Up to 60% faster LCP and up to 100% reduced CLS

Slide 70

Slide 70 text

Next.js Image Component Features and bene fi ts • Automatic srcsets for images • Enforced sizing to prevent layout shift • Automatic lazy-loading of o ff screen assets • Framework-speci fi c asset prioritization optimizations • Flexible layout options • Customizable loader support for any image server or CDN Up to 60% faster LCP and up to 100% reduced CLS

Slide 71

Slide 71 text

Images in Next.js without Next Image import Head from 'next/head'; export default function Index() { return (
Create Next App
Donut Donut

Slide 72

Slide 72 text

Next.js Image Component

Slide 73

Slide 73 text

Images in Next.js with Next Image import Head from 'next/head'; import Image from 'next/image'; export default function Index() { return (
Next.js Image Component

Slide 74

Slide 74 text

Next.js Image Component

Slide 75

Slide 75 text

Next.js Image Component

Slide 76

Slide 76 text

THE BEST OPTIMIZATIONS IMPROVE USER-EXPERIENCE AND BUSINESS OUTCOMES.

Slide 77

Slide 77 text

31% improvement in LCP increased sales by 8% Optimizations to improve LCP included resizing their hero image, optimizing SVGs and using media queries to limit loading o ff screen images. Their optimizations to LCP included a 2.5s saving from switching their fi rst large image from being behind JavaScript (client-side hydration) to being directly in the main HTML document. 70% improvement in LCP correlated with a 76% reduction in load abandonment They determined shifts were caused after their hero images were loaded and snapped in for the fi rst view. They used Aspect Ratio Boxes to reserve space before their image was loaded. Optimizations to CLS helped increase News page views per session by 15% French Fashion house Chloè used Link Preload to preload their 1x and 2x Hero images, which were previously bottlenecked by a render-blocking script. Preloading 1x and 2x Hero images bottlenecked by render- blocking script improved LCP by 500ms (based on CrUX)

Slide 78

Slide 78 text

AUTOMATE BEST PRACTICES Video by Mikhail Nilov from Pexels

Slide 79

Slide 79 text

Thank you! @addyosmani