Slide 1

Slide 1 text

David Newton, St. Michael’s Hospital 1 Improving performance with responsive (and responsible!) images OpenWest, 2015-05-07 Twitter: @newtron Github: @nwtn Email: [email protected] Slides: https://github.com/nwtn/pres-respimg-perf-openwest

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

“ 8 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

9 — OpenSignal, Android Fragmentation Visualized (August 2014)

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

11 img { max-width: 100%; }

Slide 13

Slide 13 text

12

Slide 14

Slide 14 text

13

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

15

Slide 17

Slide 17 text

16

Slide 18

Slide 18 text

17

Slide 19

Slide 19 text

18

Slide 20

Slide 20 text

19 Bullet 1 Bullet 2 Bullet 3

Slide 21

Slide 21 text

20 Bullet 1 Bullet 2 Bullet 3

Slide 22

Slide 22 text

21

Slide 23

Slide 23 text

22 2x resolution = 4x as many pixels 3x resolution = 9x as many pixels 4x resolution = 16x as many pixels

Slide 24

Slide 24 text

23 more pixels = more energy more pixels = more money more pixels = more time

Slide 25

Slide 25 text

24 — Dave Rupert , Mo’ Pixels, Mo’ Problems Caption

Slide 26

Slide 26 text

25 That’s why images.

Slide 27

Slide 27 text

26 Responsive images

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

29

Slide 31

Slide 31 text

30

Slide 32

Slide 32 text

31

Slide 33

Slide 33 text

32 SVG WebP JPEG XR JPEG 2000

Slide 34

Slide 34 text

33

Slide 35

Slide 35 text

34 Using JavaScript is a bad idea.

Slide 36

Slide 36 text

35 Using CSS is a bad idea.

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

37 You can use this now!

Slide 39

Slide 39 text

38 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 40

Slide 40 text

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

Slide 41

Slide 41 text

40 Resolution switching Markup

Slide 42

Slide 42 text

40 Resolution switching Markup

Slide 43

Slide 43 text

41 A rad wolf

Slide 44

Slide 44 text

42 A rad wolf

Slide 45

Slide 45 text

43 A rad wolf

Slide 46

Slide 46 text

44 A rad wolf

Slide 47

Slide 47 text

45 A rad wolf

Slide 48

Slide 48 text

46 A rad wolf

Slide 49

Slide 49 text

47 A rad wolf

Slide 50

Slide 50 text

48 Viewport (and resolution!) switching Markup

Slide 51

Slide 51 text

49 A rad wolf

Slide 52

Slide 52 text

50 A rad wolf

Slide 53

Slide 53 text

51 A rad wolf

Slide 54

Slide 54 text

52 A rad wolf

Slide 55

Slide 55 text

53 A rad wolf

Slide 56

Slide 56 text

54 A rad wolf

Slide 57

Slide 57 text

55 A rad wolf

Slide 58

Slide 58 text

56 A rad wolf

Slide 59

Slide 59 text

57 A rad wolf

Slide 60

Slide 60 text

58 A rad wolf

Slide 61

Slide 61 text

59

Slide 62

Slide 62 text

60 A rad wolf

Slide 63

Slide 63 text

61 A rad wolf

Slide 64

Slide 64 text

62 File type switching Markup

Slide 65

Slide 65 text

63 A rad wolf

Slide 66

Slide 66 text

64 A rad wolf

Slide 67

Slide 67 text

65 A rad wolf

Slide 68

Slide 68 text

66 A rad wolf

Slide 69

Slide 69 text

67 A rad wolf

Slide 70

Slide 70 text

68 A rad wolf

Slide 71

Slide 71 text

69 A rad wolf

Slide 72

Slide 72 text

70 Art direction Markup

Slide 73

Slide 73 text

71 —Adventure Time

Slide 74

Slide 74 text

72

Slide 75

Slide 75 text

73

Slide 76

Slide 76 text

74 A rad wolf

Slide 77

Slide 77 text

75 A rad wolf

Slide 78

Slide 78 text

76 A rad wolf

Slide 79

Slide 79 text

77 A rad wolf

Slide 80

Slide 80 text

78 A rad wolf

Slide 81

Slide 81 text

79 A rad wolf

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

81 A rad wolf

Slide 85

Slide 85 text

82 A rad wolf

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

84 Responsive images are a pain in the butt

Slide 88

Slide 88 text

85

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

87 $ npm install grunt-respimg --save-dev

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

89 $ npm install grunt-responsive-images- extender --save-dev

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

91 $ composer require nwtn/php-respimg

Slide 95

Slide 95 text

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

Slide 96

Slide 96 text

93 Responsible images

Slide 97

Slide 97 text

94 1. Responsive images

Slide 98

Slide 98 text

95 1. Responsive images 2. Image optimization

Slide 99

Slide 99 text

96 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 100

Slide 100 text

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

Slide 101

Slide 101 text

98 1. Responsive images 2. Image optimization 3. Deferred image loading

Slide 102

Slide 102 text

99

Slide 103

Slide 103 text

100

Slide 104

Slide 104 text

101 http://css-tricks.com/snippets/javascript/lazy-loading-images/ LazyLoad JS scripts and plugins, e.g.:

Slide 105

Slide 105 text

102 1. Responsive images 2. Image optimization 3. Deferred image loading 4. CDNs & Caching

Slide 106

Slide 106 text

103 ExpiresActive on ExpiresDefault "access plus 1 month" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year"

Slide 107

Slide 107 text

104 1. Responsive images 2. Image optimization 3. Deferred image loading 4. CDNs & Caching 5. Appropriate contrast and colour

Slide 108

Slide 108 text

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

Slide 109

Slide 109 text

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

Slide 110

Slide 110 text

107

Slide 111

Slide 111 text

108 http://colororacle.org/ Color Oracle

Slide 112

Slide 112 text

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

Slide 113

Slide 113 text

110 1. Responsive images 2. Image optimization 3. Deferred image loading 4. CDNs & Caching 5. Appropriate contrast and colour 6. Text-based alternatives

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

112 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 116

Slide 116 text

113 1. Responsive images 2. Image optimization 3. Deferred image loading 4. CDNs & Caching 5. Appropriate contrast and colour 6. Text-based alternatives 7. Fewer images!

Slide 117

Slide 117 text

114 Performance impact

Slide 118

Slide 118 text

115

Slide 119

Slide 119 text

116

Slide 120

Slide 120 text

117 Unoptimized Optimized + Responsive Optimized + Responsive + Lazyload CSS 1 KB 1 KB 1 KB HTML 2 KB 3 KB 3 KB Scripts 29 KB 33 KB 33 KB Images 661 KB 253 KB 87 KB Total 693 KB 290 KB (~58% savings) 119 KB (~83% savings)

Slide 121

Slide 121 text

118 Browser Unoptimized Optimized + Responsive + Lazyload Firefox (Desktop) 2.2 s 2.0 s Safari (iOS) 2.1 s 1.7 s Average 2.2 s 1.9 s (~14% savings)

Slide 122

Slide 122 text

119

Slide 123

Slide 123 text

120 Accessibility Progressive enhancement Responsive web design Web performance

Slide 124

Slide 124 text

David Newton, St. Michael’s Hospital 121 Improving performance with responsive (and responsible!) images OpenWest, 2015-05-07 Twitter: @newtron Github: @nwtn Email: [email protected] Slides: https://github.com/nwtn/pres-respimg-perf-openwest