Slide 1

Slide 1 text

David Newton, St. Michael’s Hospital 1 Improving performance with responsive (and responsible!) images CSSConf, 2015-06-18 Twitter: @newtron Github: @nwtn Email: [email protected] Slides: http://nwtn.ca/b

Slide 2

Slide 2 text

2 Web performance

Slide 3

Slide 3 text

“ 3 Many of us are fortunate to live in high bandwidth regions, but there are still large portions of the world that do not. By keeping your client side code small and lightweight, you can literally open your product up to new markets. —Chris Zacharias, Page Weight Matters (emphasis mine)

Slide 4

Slide 4 text

“ 4 Good performance is good design. —Brad Frost

Slide 5

Slide 5 text

5 Why images?

Slide 6

Slide 6 text

6 —Marc Andreessen, www-talk, February 1993

Slide 7

Slide 7 text

7 Fonts 98 KB Stylesheets 63 KB Video 208 KB HTML 55 KB Scripts 334 KB Other 4 KB Images 1,312 KB Total: 2,061 KB

Slide 8

Slide 8 text

8

Slide 9

Slide 9 text

“ 9 More human beings today have access to a cellphone than…a clean toilet. –Anand Giridharadas, New York Times April 10 2010

Slide 10

Slide 10 text

10

Slide 11

Slide 11 text

11 — OpenSignal, Android Fragmentation Visualized (August 2014)

Slide 12

Slide 12 text

12 —https://twitter.com/lukew/status/507880029737328640/photo/1

Slide 13

Slide 13 text

13 A problem: We want images to look good e’rywhere

Slide 14

Slide 14 text

14 img { max-width: 100%; }

Slide 15

Slide 15 text

15

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

17

Slide 18

Slide 18 text

18 A solution: Serve one big image and let the browser scale it

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

20

Slide 21

Slide 21 text

21 Bullet 1 Bullet 2 Bullet 3

Slide 22

Slide 22 text

22 Bullet 1 Bullet 2 Bullet 3

Slide 23

Slide 23 text

23

Slide 24

Slide 24 text

24 more pixels = more energy more pixels = more memory more pixels = more time

Slide 25

Slide 25 text

25 A problem: We want images to look good e’rywhere

Slide 26

Slide 26 text

26 A harder problem: We want images to look good e’rywhere, without hurting the user experience

Slide 27

Slide 27 text

27 Responsive images

Slide 28

Slide 28 text

28 A solution: Serve one big image and let the browser scale it

Slide 29

Slide 29 text

29 A better solution: Serve an appropriate image to each user

Slide 30

Slide 30 text

30

Slide 31

Slide 31 text

31

Slide 32

Slide 32 text

32

Slide 33

Slide 33 text

33 SVG WebP JPEG XR JPEG 2000

Slide 34

Slide 34 text

34

Slide 35

Slide 35 text

35 Using CSS is a bad idea.

Slide 36

Slide 36 text

36 Using JavaScript is a bad idea.

Slide 37

Slide 37 text

37 http://whatwg.org/html#the-picture-element Responsive images specification

Slide 38

Slide 38 text

38 Resolution switching Markup

Slide 39

Slide 39 text

38 Resolution switching Markup

Slide 40

Slide 40 text

39 A rad wolf

Slide 41

Slide 41 text

40 A rad wolf

Slide 42

Slide 42 text

41 A rad wolf

Slide 43

Slide 43 text

42 A rad wolf

Slide 44

Slide 44 text

43 A rad wolf

Slide 45

Slide 45 text

44 A rad wolf

Slide 46

Slide 46 text

45 A rad wolf

Slide 47

Slide 47 text

46 Viewport (and resolution!) switching Markup

Slide 48

Slide 48 text

47 A rad wolf

Slide 49

Slide 49 text

48 A rad wolf

Slide 50

Slide 50 text

49 A rad wolf

Slide 51

Slide 51 text

50 A rad wolf

Slide 52

Slide 52 text

51 A rad wolf

Slide 53

Slide 53 text

52 A rad wolf

Slide 54

Slide 54 text

53 A rad wolf

Slide 55

Slide 55 text

54 A rad wolf

Slide 56

Slide 56 text

55 A rad wolf

Slide 57

Slide 57 text

56 A rad wolf

Slide 58

Slide 58 text

57

Slide 59

Slide 59 text

58 A rad wolf

Slide 60

Slide 60 text

59 A rad wolf

Slide 61

Slide 61 text

60 File type switching Markup

Slide 62

Slide 62 text

61 A rad wolf

Slide 63

Slide 63 text

62 A rad wolf

Slide 64

Slide 64 text

63 A rad wolf

Slide 65

Slide 65 text

64 A rad wolf

Slide 66

Slide 66 text

65 A rad wolf

Slide 67

Slide 67 text

66 A rad wolf

Slide 68

Slide 68 text

67 A rad wolf

Slide 69

Slide 69 text

68 Art direction Markup

Slide 70

Slide 70 text

69 —Adventure Time

Slide 71

Slide 71 text

70

Slide 72

Slide 72 text

71

Slide 73

Slide 73 text

72 A rad wolf

Slide 74

Slide 74 text

73 A rad wolf

Slide 75

Slide 75 text

74 A rad wolf

Slide 76

Slide 76 text

75 A rad wolf

Slide 77

Slide 77 text

76 A rad wolf

Slide 78

Slide 78 text

77 A rad wolf

Slide 79

Slide 79 text

78 All the things! Markup a.k.a. the scary slide

Slide 80

Slide 80 text

78 All the things! Markup a.k.a. the scary slide

Slide 81

Slide 81 text

79 A rad wolf

Slide 82

Slide 82 text

80 A rad wolf

Slide 83

Slide 83 text

81 http://whatwg.org/html#the-picture-element Responsive images specification

Slide 84

Slide 84 text

82 http://codepen.io/Tigt/blog/when-responsive-images-get-ugly When responsive images get ugly

Slide 85

Slide 85 text

83 You can use this now!

Slide 86

Slide 86 text

84 Firefox (Gecko) Chrome/Opera (Blink) Safari (WebKit) Internet Explorer/ Edge srcset + sizes Works now! Firefox 38 Works now! Chrome 34 Opera 21 Works now! * Safari 6.2 Safari 7.1 iOS 8 In development picture Works now! Firefox 38 Works now! Chrome 38 Opera 25 In development Under consideration

Slide 87

Slide 87 text

85 http://picturefill.responsiveimages.org/ Picturefill by Scott Jehl & others http://filamentgroup.com/lab/to-picturefill.html To Picturefill, or not to Picturefill

Slide 88

Slide 88 text

86 Responsive images are a pain in the butt

Slide 89

Slide 89 text

87

Slide 90

Slide 90 text

88 https://www.npmjs.com/package/grunt-respimg grunt-respimg

Slide 91

Slide 91 text

89 https://github.com/nwtn/php-respimg/ php-respimg

Slide 92

Slide 92 text

90 https://www.npmjs.com/package/grunt- responsive-images-extender/ grunt-responsive-images-extender

Slide 93

Slide 93 text

91 https://wordpress.org/plugins/ricg-responsive-images/ WP RICG Responsive Images plugin

Slide 94

Slide 94 text

92 Responsible images

Slide 95

Slide 95 text

93 1. Responsive images

Slide 96

Slide 96 text

94 1. Responsive images 2. Image optimization

Slide 97

Slide 97 text

95 https://imageoptim.com/ ImageOptim https://github.com/toy/image_optim image_optim https://github.com/svg/svgo-gui SVGO-GUI https://github.com/svg/svgo SVGO

Slide 98

Slide 98 text

96 SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE "image/svg+xml"

Slide 99

Slide 99 text

97 1. Responsive images 2. Image optimization 3. Deferred image loading (a.k.a. “lazy loading”)

Slide 100

Slide 100 text

98

Slide 101

Slide 101 text

99

Slide 102

Slide 102 text

100 http://afarkas.github.io/lazysizes/ LazyLoad JS scripts and plugins, e.g.:

Slide 103

Slide 103 text

101 1. Responsive images 2. Image optimization 3. Deferred image loading (a.k.a. “lazy loading”) 4. CDNs & Caching

Slide 104

Slide 104 text

102 1. Responsive images 2. Image optimization 3. Deferred image loading (a.k.a. “lazy loading”) 4. CDNs & Caching 5. Appropriate contrast and colour

Slide 105

Slide 105 text

103 7% 8% 10% 11% 29% 35% April May June July August September

Slide 106

Slide 106 text

104 7% 8% 10% 11% 29% 35% April May June July August September

Slide 107

Slide 107 text

105

Slide 108

Slide 108 text

106 http://colororacle.org/ Color Oracle

Slide 109

Slide 109 text

107 September 7% August 8% July 10% June 11% May 29% April 35%

Slide 110

Slide 110 text

108 1. Responsive images 2. Image optimization 3. Deferred image loading (a.k.a. “lazy loading”) 4. CDNs & Caching 5. Appropriate contrast and colour 6. Text-based alternatives

Slide 111

Slide 111 text

109 [alt] [aria-describedby], [aria-labelledby] [longdesc] SVG elements and attributes

Slide 112

Slide 112 text

110 http://www.w3.org/TR/html-alt-techniques/ HTML5: Techniques for providing useful text alternatives http://www.w3.org/WAI/GL/wiki/Using_aria-describedby_to_provide_descriptions_of_images Using aria-describedby to provide descriptions of images http://w3c.github.io/test-results/html-longdesc/cr-report.html longdesc Implementation Report http://www.paciellogroup.com/blog/2013/12/using-aria-enhance-svg-accessibility/ Using ARIA to enhance SVG accessibility http://www.w3.org/WAI/GL/wiki/Using_aria-labelledby_to_provide_a_text_alternative_for_non- text_content Using aria-labelledby to provide a text alternative for non-text content

Slide 113

Slide 113 text

111 1. Responsive images 2. Image optimization 3. Deferred image loading (a.k.a. “lazy loading”) 4. CDNs & Caching 5. Appropriate contrast and colour 6. Text-based alternatives 7. Fewer images!

Slide 114

Slide 114 text

“ 112 Good performance is good design. —Brad Frost

Slide 115

Slide 115 text

David Newton, St. Michael’s Hospital 113 Improving performance with responsive (and responsible!) images CSSConf, 2015-06-18 Twitter: @newtron Github: @nwtn Email: [email protected] Slides: http://nwtn.ca/b