responsive responsive design

105
Tim Kadlec @tkadlec 2012 Web Peformance Summit 8/29/2012 Responsive Responsive Design Building sites that are flexible and fast NY Web Perf Meetup | April 23, 2013

Upload: tim-kadlec

Post on 15-May-2015

6.403 views

Category:

Technology


3 download

DESCRIPTION

Presented at the New York Web Performance Meetup in NYC on April 23, 2013

TRANSCRIPT

Page 1: Responsive Responsive Design

Tim Kadlec @tkadlec 2012 Web Peformance Summit 8/29/2012

ResponsiveResponsive Design

Building sites that are flexible and fast

NY Web Perf Meetup | April 23, 2013

Page 2: Responsive Responsive Design

— Ethan Marcotte

Now more than ever, we’re designing work meant to be viewed along a gradient of different experiences. Responsive web design offers us a way forward, finally allowing us to “design for the ebb and flow of things.

http://alistapart.com/article/responsive-web-design

Page 3: Responsive Responsive Design
Page 4: Responsive Responsive Design

— John Allsopp

The control which designers know in the print medium, and often desire in the web medium, is simply a function of the limitation of the printed page. We should embrace the fact that the web doesn’t have the same constraints, and design for this flexibility.

http://alistapart.com/article/dao

Page 5: Responsive Responsive Design

More than layout

Page 6: Responsive Responsive Design

— Ethan Marcotte

Now more than ever, we’re designing work meant to be viewed along a gradient of different experiences. Responsive web design offers us a way forward, finally allowing us to “design for the ebb and flow of things.

gradient of different experiences

http://alistapart.com/article/responsive-web-design

Page 7: Responsive Responsive Design

— Ethan Marcotte

Now more than ever, we’re designing work meant to be viewed along a gradient of different experiences. Responsive web design offers us a way forward, finally allowing us to “design for the ebb and flow of things.

gradient of different experiences

http://alistapart.com/article/responsive-web-design

Page 8: Responsive Responsive Design

— Stephanie Rieger

Shoot me now…responsive design has seemingly become confused with an opportunity to reduce performance rather than improve it.

https://twitter.com/stephanierieger/status/245240465572642816

Page 9: Responsive Responsive Design

74 requests, 1511kb114 requests, 1200kb99 requests, 1298kb105 requests, 5942kb

Page 10: Responsive Responsive Design
Page 11: Responsive Responsive Design

48.97s, 55632.80kb

Page 12: Responsive Responsive Design
Page 13: Responsive Responsive Design
Page 14: Responsive Responsive Design
Page 15: Responsive Responsive Design
Page 16: Responsive Responsive Design
Page 17: Responsive Responsive Design
Page 18: Responsive Responsive Design
Page 19: Responsive Responsive Design
Page 20: Responsive Responsive Design
Page 24: Responsive Responsive Design

Revenue

Page 25: Responsive Responsive Design

RevenueTrafficConversionsSatisfactionPage views

Page 26: Responsive Responsive Design

71%as quickly or faster

http://www.gomez.com/resources/whitepapers/survey-report-what-users-want-from-mobile

Page 27: Responsive Responsive Design

Performance is a fundamental component of the user experience.

Page 28: Responsive Responsive Design

Blame the implementation, not the technique.

Page 29: Responsive Responsive Design
Page 31: Responsive Responsive Design

March 2012: 829kbMarch 2013: 1031kb

http://www.stevesouders.com/blog/2013/04/05/page-weight-grows-24-year-over-year-not-44/

Page 32: Responsive Responsive Design
Page 33: Responsive Responsive Design

Performance needs to matter because it matters to usersA culture of performance

Page 34: Responsive Responsive Design

— A friend

I doubt anyone really wants to release a site that doesn't perform well, it's just a product of not being afforded the luxury of time and top-down pressure.

Page 35: Responsive Responsive Design

Set a performance budget

Page 36: Responsive Responsive Design

Must be usable in <= 10s65kB - 100kB

Page 37: Responsive Responsive Design

1. Optimize

Page 38: Responsive Responsive Design

1. Optimize2. Remove

Page 39: Responsive Responsive Design

1. Optimize2. Remove3. Don’t Add

Page 40: Responsive Responsive Design

Become a performance masochistEmbrace the pain

Page 41: Responsive Responsive Design

Get real, early

Page 42: Responsive Responsive Design

— Brad Frost

You can’t mock-up performance in Photoshop.

Page 43: Responsive Responsive Design
Page 44: Responsive Responsive Design

Or: Why I cry myself to sleep at nightResponsive Images

Page 45: Responsive Responsive Design

display:none is useless

Page 46: Responsive Responsive Design

<div id="test1"> <img src="images/test1.png" alt="" /></div>

@media all and (max-width: 600px) { #test1 { display:none; }}

Page 47: Responsive Responsive Design

Except Opera Mobile and Opera MiniEverybody loads it anyway

Page 49: Responsive Responsive Design

<picture width="500" height="500"> <source media="(min-width: 45em)" src="large.jpg"> <source media="(min-width: 18em)" src="med.jpg"> <source src="small.jpg"> <img src="small.jpg" alt=""> <p>Accessible text</p></picture>

Page 50: Responsive Responsive Design

<div data-picture data-alt="A giant stone face at The Bayon temple in Angkor Thom, Cambodia"> <div data-src="small.jpg"></div> <div data-src="medium.jpg"

data-media="(min-width: 400px)"></div> <div data-src="large.jpg"

data-media="(min-width: 800px)"></div> <div data-src="extralarge.jpg"

data-media="(min-width: 1000px)"></div>

<!-- Fallback content for non-JS browsers. Same img src as the initial, unqualified source element. --> <noscript> <img src="external/imgs/small.jpg" alt="A giant stone face at The Bayon temple in Angkor Thom, Cambodia"> </noscript></div>

Page 51: Responsive Responsive Design

<img src="fallback.jpg" alt="" srcset="small.jpg 640w 1x, small-hd.jpg 640w 2x, med.jpg 1x, med-hd.jpg 2x ">

Page 52: Responsive Responsive Design

Actually, not so suckyBackground images

Page 53: Responsive Responsive Design

<div id="test3"> <div></div></div>

#test3 div { background-image:url('images/test3.png'); width:200px; height:75px;}@media all and (max-width: 600px) { #test3 { display:none; }}

Page 54: Responsive Responsive Design

<div id="test5"></div>

@media all and (min-width: 601px) { #test5 { background-image:url('images/test5-desktop.png'); width:200px; height:75px; }}@media all and (max-width: 600px) { #test5 { background-image:url('images/test5-mobile.png'); width:200px; height:75px; }}

Page 55: Responsive Responsive Design

Load only what you need, when you need itConditional loading

Page 57: Responsive Responsive Design

1. Content

https://speakerdeck.com/andyhume/anatomy-of-a-responsive-page-load-whiskyweb-ii

2. Enhancements

Page 58: Responsive Responsive Design

1. Content

https://speakerdeck.com/andyhume/anatomy-of-a-responsive-page-load-whiskyweb-ii

2. Enhancements3. Leftovers

Page 59: Responsive Responsive Design

Cutting the mustard

Page 60: Responsive Responsive Design

if (‘querySelector’ in document

! && ‘localStorage’ in window

! && ‘addEventListener’ in window) {

}

Page 64: Responsive Responsive Design

globe.enhanced = (

! respond.mediaQueriesSupported

! || globe.browser.ie6

! || globe.browser.ie7

! || globe.browser.ie8

)

Page 65: Responsive Responsive Design
Page 66: Responsive Responsive Design
Page 67: Responsive Responsive Design

<h2>

<a data-target="reviews"

href="reviews.html">Reviews</a>

</h2>

Page 68: Responsive Responsive Design

anchorInclude : function ( elem ) {

var url = elem.getAttribute('href');

var target =

document.getElementById(elem.getAttribute

('data-target'));

reqwest(url, function (resp) {

target.innerHTML = resp;

});

}

Page 69: Responsive Responsive Design

<a href="..." data-replace="articles/latest/

fragment">Latest Articles</a>

<a href="..." data-before="articles/latest/

fragment">Latest Articles</a>

<a href="..." data-after="articles/latest/

fragment">Latest Articles</a>

<a href="..." data-append="articles/latest/

fragment">Latest Articles</a>

Page 70: Responsive Responsive Design

$("[data-append],[data-replace],[data-after],

[data-before]").ajaxInclude();

Page 71: Responsive Responsive Design

No AJAX, no problem

Page 72: Responsive Responsive Design

<div data-lazy-content="more_puppies" aria-

live="polite">

<!--

<p>You clicked for more puppies! Here you

go:</p>

<img src="puppy.jpg" alt="Lazy loaded

puppy image" />

-->

</div>

Page 73: Responsive Responsive Design

var toShow = document.querySelectorAll('[data-lazy-

content=' + item.getAttribute('[data-lazy-reveal]') +

']';

for (var j = toShow.length - 1; j >= 0; j--) {

! var children = toShow[j].childNodes;

! for (var k = children.length - 1; k >= 0; k--) {

! ! var child = children[k];

! ! if (child.nodeType === 8) {

! ! ! //it's a comment

! ! ! toShow[j].innerHTML = child.nodeValue;

! ! ! break;

! ! }

! }

}

Page 74: Responsive Responsive Design

Lazy-load images*maybe*

Page 75: Responsive Responsive Design
Page 79: Responsive Responsive Design
Page 83: Responsive Responsive Design

Maybe?

Page 85: Responsive Responsive Design

What about CSS?

Page 86: Responsive Responsive Design

Embeddeda {

! text-decoration: none;

}

@media screen and (min-width: 1300px) {

! a {

! ! text-decoration: underline;

! }

}

Page 87: Responsive Responsive Design

External

<link href=”style.css” media=”only screen and

(min-width: 1300px)” />

Page 88: Responsive Responsive Design

Embedded External

One HTTP request Many HTTP requests

Large file could be hard to maintain Organization can be easier

Extra weight, regardless of if needed Smaller CSS for device not supporting media queries

All styles downloaded All styles downloaded (if media queries supported)

Page 90: Responsive Responsive Design
Page 91: Responsive Responsive Design

Chrome 26Safari 6.0.2iOS Safari 6.1Android 4.2.1Android 4.2.1 Chrome 18Android 4.2.1 Chrome 18Android 4.2.1 Opera Mini

Yay!

Page 92: Responsive Responsive Design

Internet Explorer 10Internet Explorer 9Internet Explorer 8Firefox 20Opera 12.15Android 4.2.1 Opera Mobile

Nooooo!

Page 93: Responsive Responsive Design

Go vanilla

Page 95: Responsive Responsive Design

jQuery = 200-300msbased on 1.8.0

http://jsperf.com/zepto-jq-eval

Page 96: Responsive Responsive Design

Up to 8s!

Page 97: Responsive Responsive Design

Custom jQuery builds

Page 98: Responsive Responsive Design

Everything hasa trade-off

Page 99: Responsive Responsive Design
Page 100: Responsive Responsive Design

What value does this provide?

Page 101: Responsive Responsive Design

Time to move beyondjust visual aesthetics

Page 102: Responsive Responsive Design

This may not be easy...

Page 103: Responsive Responsive Design

...but man is it fun!

Page 104: Responsive Responsive Design

thank you!

@tkadlec timkadlec.com

TIM KADLEC

Page 105: Responsive Responsive Design

implementingresponsivedesign.com