Give Responsive Design a Mobile Performance Boost

88
John Arne Sæterås Twitter: @jonarnes Head of innovation at Mobiletech http://www.slideshare.net/jonarnes/ August 18, 2010 YEP, WEB ON MOBILE IS SLOW fredag 20. september 13

description

Jon Arne Sæterås at ModUX 2013 http://moduxcon.com

Transcript of Give Responsive Design a Mobile Performance Boost

Page 1: Give Responsive Design a Mobile Performance Boost

John Arne SæteråsTwitter : @jonarnesHead of innovation at Mobiletechhttp://www.slideshare.net/jonarnes/

August 18, 2010

YEP, WEB ON MOBILE IS SLOW

fredag 20. september 13

Page 2: Give Responsive Design a Mobile Performance Boost

100 ms faster :1% increased revenue

1 sec delay:2.8% drop in revenue

http://www.slideshare.net/stubbornella/designing-fast-websites-presentationhttp://slideshare.net/markstanton/speed-matters

SLOW IS NOT COOL...even less cool on mobile

fredag 20. september 13

Page 3: Give Responsive Design a Mobile Performance Boost

THE VALUE CHAIN

developer server internet telco  network device

Doesn’t really make things more difficult, but reveal a few issues

browser

fredag 20. september 13

Page 4: Give Responsive Design a Mobile Performance Boost

WHY IS MOBILE SLOWER?

fredag 20. september 13

Page 5: Give Responsive Design a Mobile Performance Boost

WHY IS MOBILE SLOWER?

• Processing Power• Browser • Battery Preserving Strategies

fredag 20. september 13

Page 6: Give Responsive Design a Mobile Performance Boost

WHY IS MOBILE SLOWER?

• Network Latency• Available Bandwidth

• Processing Power• Browser • Battery Preserving Strategies

fredag 20. september 13

Page 7: Give Responsive Design a Mobile Performance Boost

WHY IS MOBILE SLOWER?

• Network Latency• Available Bandwidth

• The Implementation

• Processing Power• Browser • Battery Preserving Strategies

fredag 20. september 13

Page 8: Give Responsive Design a Mobile Performance Boost

CURRENT STATE OF THE WEB AND MOBILE

fredag 20. september 13

Page 9: Give Responsive Design a Mobile Performance Boost

1.6 MB4%9%

6%3%

17% 63%

Images ScriptsCSS FlashOther HTML

in 94 requests on average

http://httparchive.org/

fredag 20. september 13

Page 10: Give Responsive Design a Mobile Performance Boost

ASIDE...

•In 2030• Average web site is

320MB

• Average (mobile) bandwidth is 93Mbps

http://mpulp.mobi/2013/06/page-weight-and-mobile-bandwidth-in-year-2030/

fredag 20. september 13

Page 13: Give Responsive Design a Mobile Performance Boost

1.6 MBin 94 requests on average

• 100-200 ms pr roundtrip• Depends....(DNS, pipelining,

concurrent TCP connections etc.)

9,4Secondslatency in

total

fredag 20. september 13

Page 14: Give Responsive Design a Mobile Performance Boost

1.6 MBin 94 requests on average

• 100-200 ms pr roundtrip• Depends....(DNS, pipelining,

concurrent TCP connections etc.)

9,4Secondslatency in

total

Hold that thought...

more on this now.

fredag 20. september 13

Page 15: Give Responsive Design a Mobile Performance Boost

MOBILE NETWORKS ARE

FREAKING MAGIC!

a quick look on how they work

fredag 20. september 13

Page 16: Give Responsive Design a Mobile Performance Boost

2.1 s to connect.

Latency, anything from 100 - >500ms

fredag 20. september 13

Page 17: Give Responsive Design a Mobile Performance Boost

2.40 s, html page loaded

TCP stuff

fredag 20. september 13

Page 19: Give Responsive Design a Mobile Performance Boost

1.6 MBin 94 requests on average

• Wake up radio (one time)• TCP and DNS (one time)• 94 round trips (6 req pr conn.)• Downloading 1.6 mb over 2Mbps

10,6Secondstotal

+ rendering time in the browser+ server response time

Disclaimer: lots of assumptions in this calculation!

fredag 20. september 13

Page 20: Give Responsive Design a Mobile Performance Boost

GOOGLE: 10.2 S.

http://analytics.blogspot.nl/2012/04/global-site-speed-overview-how-fast-are.htmlfredag 20. september 13

Page 21: Give Responsive Design a Mobile Performance Boost

Load time: 7.3 sSize: 7.3 MB

Load time: 7.7 sSize: 7.2 MB

fredag 20. september 13

Page 22: Give Responsive Design a Mobile Performance Boost

SERVE A PAGE TO A MOBILE DEVICE IN

LESS THAN 1 SECOND?

A great overview by Ilya Grigorik bit.ly/mobile-barrier

fredag 20. september 13

Page 23: Give Responsive Design a Mobile Performance Boost

WHO CARES?The users care!

fredag 20. september 13

Page 24: Give Responsive Design a Mobile Performance Boost

WHO CARES?The users care!

Telco Network53,53 %

Other46,47 %

How users connect. Page views per connection type. (Scandinavian Countries).

Source: Mobiletech

fredag 20. september 13

Page 26: Give Responsive Design a Mobile Performance Boost

SO, WHAT IS OUR CURRENT APPROACH TO THIS?

fredag 20. september 13

Page 27: Give Responsive Design a Mobile Performance Boost

ENTER RESPONSIVE WEB DESIGN

Yay!

fredag 20. september 13

Page 30: Give Responsive Design a Mobile Performance Boost

RWD IS A TECHNIQUENothing wrong with the technique! It is brilliant!

The famous Iceberg: @brad_frostfredag 20. september 13

Page 31: Give Responsive Design a Mobile Performance Boost

RWD IS A TECHNIQUENothing wrong with the technique! It is brilliant!

The famous Iceberg: @brad_frostfredag 20. september 13

Page 32: Give Responsive Design a Mobile Performance Boost

RWD != MOBILE FRIENDLYbut an important step in the right direction

fredag 20. september 13

Page 33: Give Responsive Design a Mobile Performance Boost

Load time: 9.07s *Size: 288.14 kb

Load time: 2.36 s *Size: 36.59 kb

*) Load event fired. - More on how the built the new BBC News site: http://slidesha.re/14IYNOO fredag 20. september 13

Page 34: Give Responsive Design a Mobile Performance Boost

http://www.bbc.co.uk/blogs/bbcinternet/2012/03/bbc_news_mobile_site_refresh.htmlfredag 20. september 13

Page 35: Give Responsive Design a Mobile Performance Boost

http://www.bbc.co.uk/blogs/bbcinternet/2012/03/bbc_news_mobile_site_refresh.htmlfredag 20. september 13

Page 36: Give Responsive Design a Mobile Performance Boost

PRIMARY ISSUES

• Over downloading

• Unused assets

• Large images

• Stuff...

• Network issues

• High Latency

• Bandwidth

• Flaky connection

fredag 20. september 13

Page 37: Give Responsive Design a Mobile Performance Boost

PARET0 PRINCIPLE

Responsive Design is 20% of the work, and might get you 80% of the way

fredag 20. september 13

Page 38: Give Responsive Design a Mobile Performance Boost

PARET0 PRINCIPLE

Responsive Design is 20% of the work, and might get you 80% of the way

the “80/20 rule”

fredag 20. september 13

Page 39: Give Responsive Design a Mobile Performance Boost

THE LAST 20%will improve performance by 80%

fredag 20. september 13

Page 40: Give Responsive Design a Mobile Performance Boost

THE LAST 20%will improve performance by 80%

fredag 20. september 13

Page 41: Give Responsive Design a Mobile Performance Boost

SOMETIMES IT MAKES SENSE TO MULTISERVE

fredag 20. september 13

Page 42: Give Responsive Design a Mobile Performance Boost

When all you have is a hammer,every problem looks like a nail

fredag 20. september 13

Page 43: Give Responsive Design a Mobile Performance Boost

When all you have is a hammer,every problem looks like a nail

RWD

device or browser

fredag 20. september 13

Page 44: Give Responsive Design a Mobile Performance Boost

HOW CAN WE FIX THIS?

fredag 20. september 13

Page 45: Give Responsive Design a Mobile Performance Boost

HOW CAN WE FIX THIS?

Adaptive Design

fredag 20. september 13

Page 46: Give Responsive Design a Mobile Performance Boost

THE VALUE CHAIN

Adaptive Responsive

developer server internet telco  network device browser

fredag 20. september 13

Page 47: Give Responsive Design a Mobile Performance Boost

RANTThere is a web server. A very capable one, too.

Use it!fredag 20. september 13

Page 48: Give Responsive Design a Mobile Performance Boost

SERVER?How to make the server side

available to front end devs

fredag 20. september 13

Page 49: Give Responsive Design a Mobile Performance Boost

fredag 20. september 13

Page 51: Give Responsive Design a Mobile Performance Boost

RESSREsponsive design with Server

Side components

fredag 20. september 13

Page 52: Give Responsive Design a Mobile Performance Boost

A BALANCING ACTno right answer

fredag 20. september 13

Page 53: Give Responsive Design a Mobile Performance Boost

PURPOSE OF RESS

• Reduce need for client side processing

• Eliminate “over downloading”

fredag 20. september 13

Page 54: Give Responsive Design a Mobile Performance Boost

INGREDIENTS OF RESS

Hello, I know exactly how to make you shine!

Information about the requesting device, network, etc.

Request/Response

fredag 20. september 13

Page 55: Give Responsive Design a Mobile Performance Boost

NOT A CRIME!82% of top 100 Alexa sites

use Device Detection

In the case of Mashable, we also detect the type of

device and change the site’s behavior

accordingly.

http://www.circleid.com/posts/20120111_analysis_of_server_side_mobile_web_detection/http://mashable.com/2012/12/11/responsive-web-design/

fredag 20. september 13

Page 56: Give Responsive Design a Mobile Performance Boost

THERE IS A DIFFERENCE

fredag 20. september 13

Page 57: Give Responsive Design a Mobile Performance Boost

THERE IS A DIFFERENCE

Feature Detectionvar  appCache=  function()  {    return  !!window.applicationCache;};

fredag 20. september 13

Page 58: Give Responsive Design a Mobile Performance Boost

THERE IS A DIFFERENCE

User-Agent sniffingvar  isiPhone  =  /iPhone/i.test(navigator.userAgent);

Feature Detectionvar  appCache=  function()  {    return  !!window.applicationCache;};

fredag 20. september 13

Page 59: Give Responsive Design a Mobile Performance Boost

THERE IS A DIFFERENCE

User-Agent sniffingvar  isiPhone  =  /iPhone/i.test(navigator.userAgent);

Feature Detectionvar  appCache=  function()  {    return  !!window.applicationCache;};

Device DetectionGET  http://ddr.demo.wew.io/c/dual_orientation

Using the User-Agent (++) as a key to look up in a data base.fredag 20. september 13

Page 60: Give Responsive Design a Mobile Performance Boost

NYT HORRORvar ua = navigator.userAgent;window.BBDevice = { isOldBB: false, indexOfVersion: ua.indexOf("Version/"), indexOfBB: ua.indexOf("BlackBerry"), fullVersion: null, version: null};if (window.BBDevice.indexOfBB >= 0) { existingClasses = document.body.className = existingClasses + " bb"; if (ua.indexOf("WebKit") < 0) { existingClasses = document.body.className = existingClasses + " oldbb"; window.BBDevice.isOldBB = true; window.BBDevice.fullVersion = ua.substr(window.BBDevice.indexOfBB); window.BBDevice.fullVersion = window.BBDevice.fullVersion.substr(window.BBDevice.fullVersion.indexOf("/") + 1, window.BBDevice.fullVersion.indexOf(" ")); window.BBDevice.version = window.BBDevice.fullVersion.substr(0, window.BBDevice.fullVersion.indexOf(".")); } else { if (window.BBDevice.indexOfVersion >= 0) { window.BBDevice.indexOfVersion = window.BBDevice.indexOfVersion + 8; window.BBDevice.fullVersion = ua.substr(window.BBDevice.indexOfVersion); window.BBDevice.fullVersion = window.BBDevice.fullVersion.substr(0, window.BBDevice.fullVersion.indexOf(" ")); window.BBDevice.version = window.BBDevice.fullVersion.substr(0, window.BBDevice.fullVersion.indexOf(".")); } }} else if (ua.indexOf("MSIE 9.0") >= 0 || ua.indexOf("IEMobile/9.0") >= 0) { existingClasses = document.body.className = existingClasses + " win75";}

http://mpulp.mobi/2013/05/user-agent-sniffing-on-the-new-nyt-mobile-site/

http://mobile.nytimes.com

fredag 20. september 13

Page 61: Give Responsive Design a Mobile Performance Boost

FEATURES OF A DDR

• Nice place to store “tacit knowledge”• “Business rules”• Specifics to your site

• Override feature detected features• If a feature works, but not well enough to make it useable

• False positives (not a HUGE issue, but still)

• Available server side too• Adapt and optimize stuff before sending to client

fredag 20. september 13

Page 62: Give Responsive Design a Mobile Performance Boost

FEATURES OF A DDR

• Nice place to store “tacit knowledge”• “Business rules”• Specifics to your site

• Override feature detected features• If a feature works, but not well enough to make it useable

• False positives (not a HUGE issue, but still)

• Available server side too• Adapt and optimize stuff before sending to client

Device Descri

ption

Repository

fredag 20. september 13

Page 64: Give Responsive Design a Mobile Performance Boost

EXAMPLE

if  ($supports_h264)echo  ‘<video  .../>’;

elseecho  ‘<a  href=”...”>Download</a>’;

fredag 20. september 13

Page 65: Give Responsive Design a Mobile Performance Boost

OUR APPROACH

fredag 20. september 13

Page 66: Give Responsive Design a Mobile Performance Boost

DEVICE DETECTIONSingle Capability

RequestGET  http://ddr.demo.wew.io/c/model_name

Response{"model_name":"iPhone"}    

Capability SetsRequestGET  http://ddr.demo.wew.io/cset/mySet

Response{"capa1":"first  capa  value","capa2":"second  capa  value"  ...}

Examples and documentation: https://github.com/whateverweb/device-detection

fredag 20. september 13

Page 67: Give Responsive Design a Mobile Performance Boost

EXAMPLE

var  http  =  new  XMLHttpRequest();http.open("GET",  "http://ddr.demo.wew.io/c/brand_name",  true);http.onreadystatechange  =  function()  {

if  (http.readyState  ==  4)console.log(http.responseText);

}http.send();

fredag 20. september 13

Page 68: Give Responsive Design a Mobile Performance Boost

EXAMPLE

public  function  get($capa){   foreach(getallheaders()  as  $key  =>  $value)  {     if  ($key  !="Host")          $this-­‐>headers[]  =  $key  .  ':  '  .  $value;   }   $url  =  $this-­‐>service  .  $capa;   $curl  =  curl_init($url);   curl_setopt($curl,  CURLOPT_RETURNTRANSFER,  true);   curl_setopt($curl,  CURLOPT_HTTPHEADER,  $this-­‐>headers);       $this-­‐>response  =  curl_exec($curl);   curl_close($curl);   return  json_decode($this-­‐>response)-­‐>$capa;}

fredag 20. september 13

Page 69: Give Responsive Design a Mobile Performance Boost

IMAGE OPTIMIZING

<img  src="http://img.demo.wew.io/http://example.com/image.jpg"/>

Simple Usage

Advanced Usage<img  src=”http://img.demo.wew.io/vpw_1024/bp_w/pc/w_31/m_48/n_98/http://example.com/img.png”/>

Examples and documentation: https://github.com/whateverweb/Image-Server

fredag 20. september 13

Page 70: Give Responsive Design a Mobile Performance Boost

EXAMPLE

<div  data-­‐picture  data-­‐alt="A  beautiful  butterfly">   <div  data-­‐src="http://img.demo.wew.io/px_100/http://exampe.com/image.png"></div>   <div  data-­‐src="http://img.demo.wew.io/px_320/http://exampe.com/image.png"  

data-­‐media="(min-­‐width:  320px)"></div>   <div  data-­‐src="http://img.demo.wew.io/px_320/@_2/http://exampe.com/image.png"  

data-­‐media="(min-­‐width:  320px)  and  (-­‐webkit-­‐min-­‐device-­‐pixel-­‐ratio:  2.0)"></div>

  <noscript>          <img  src="http://img.demo.wew.io/px_10/http://exampe.com/image.png">   </noscript></div>

Picturefill: https://github.com/scottjehl/picturefill. Full example: https://github.com/whateverweb/Image-Server/blob/master/examples/picturefill/index.html

Using Picturefill

fredag 20. september 13

Page 71: Give Responsive Design a Mobile Performance Boost

CSS OPTIMIZATION

Device Capabilities as Media Features

Removing overhead and excess styles

Examples and documentation: https://github.com/whateverweb/CSS-processor

@media  (-­‐wew-­‐pointing-­‐method:  touchscreen){                              a  {    

padding:  10px;}            

}

@media  all  and  (min-­‐width:  1500px){     //removed  for  devices  where  1500px  is  impossible.  e.g.  iPhones                  body{color:  green;}                }

fredag 20. september 13

Page 72: Give Responsive Design a Mobile Performance Boost

CSS OPTIMIZATION

Device Capabilities as Media Features

Removing overhead and excess styles

Examples and documentation: https://github.com/whateverweb/CSS-processor

@media  (-­‐wew-­‐pointing-­‐method:  touchscreen){                              a  {    

padding:  10px;}            

}

@media  all  and  (min-­‐width:  1500px){     //removed  for  devices  where  1500px  is  impossible.  e.g.  iPhones                  body{color:  green;}                }

Server S

ide renderi

ng

fredag 20. september 13

Page 73: Give Responsive Design a Mobile Performance Boost

EXAMPLE

@import  url('http://demo.wew.io/styles/iPadStyles.css')  all  and  (-­‐wew-­‐model-­‐name:  iPad);

@import  url(http://demo.wew.io/CSS-­‐processor/examples/inlining/right.css)  all  and  (min-­‐device-­‐width:  480px);

fredag 20. september 13

Page 74: Give Responsive Design a Mobile Performance Boost

EXAMPLE<!doctype  html><html><head>

   <link  rel="stylesheet"  href="//css.demo.wew.io/http://example.com/style.css”/>

</head><body>

 <img  src="http://img.demo.wew.io/http://example.com/image.jpg"/>

<script>  var  w=new  wew();  w.getSet("myset",cb);</script>

</body></html>

• Markup lives anywhere• CSS and images are proxied,

optimized and cached• Device data available client side

fredag 20. september 13

Page 75: Give Responsive Design a Mobile Performance Boost

FTW?Does adaptive design have a

positive impact on performance?

fredag 20. september 13

Page 76: Give Responsive Design a Mobile Performance Boost

EFFECT

0108215323430

Size

No WeW With WeW

01 0002 0003 0004 000

Time0

5751 1501 7252 300

Latency

20% less data transfer

50% faster download

73% reduced latency

fredag 20. september 13

Page 77: Give Responsive Design a Mobile Performance Boost

BUT...

fredag 20. september 13

Page 78: Give Responsive Design a Mobile Performance Boost

CAN’T DO MAGIC

0

975

1 950

2 925

3 900

Onload

no WeW with WeW

Only 4% faster in total

Due to lazy loading of assetsand repaints etc.

fredag 20. september 13

Page 79: Give Responsive Design a Mobile Performance Boost

CAN’T DO MAGIC

0

975

1 950

2 925

3 900

Onload

no WeW with WeW

Only 4% faster in total

Due to lazy loading of assetsand repaints etc.

Lazy loading good

or bad? Depends...

fredag 20. september 13

Page 80: Give Responsive Design a Mobile Performance Boost

MARSHALLHEADPHONES.COM

• Down from 1.6MB to 432KB

• Load time down from 6,1s to 1,9s

fredag 20. september 13

Page 81: Give Responsive Design a Mobile Performance Boost

FUN-FACTLoading apple.com consume

1.41% of battery life.

http://www2012.wwwconference.org/proceedings/proceedings/p41.pdf

12 - 4% in 8 mins of web surfing

fredag 20. september 13

Page 82: Give Responsive Design a Mobile Performance Boost

FUN-FACTLoading apple.com consume

1.41% of battery life.

http://www2012.wwwconference.org/proceedings/proceedings/p41.pdf

Not so

12 - 4% in 8 mins of web surfing

fredag 20. september 13

Page 83: Give Responsive Design a Mobile Performance Boost

PERFORMANCE FRONT END STARTS WITH THE BACK END

Too much is left to the browser to figure out.

fredag 20. september 13

Page 84: Give Responsive Design a Mobile Performance Boost

SUMMING UP

developer server internet telco  network device browser

We......must do

stuff here...

...to relieve...

...and......to make life easier for...

...and...

fredag 20. september 13

Page 85: Give Responsive Design a Mobile Performance Boost

THE RULES

1. Make Fewer HTTP Requests2. Use a Content Delivery Network3. Add an Expires Header4. Gzip Components5. Put Stylesheets at the Top6. Put Scripts at the Bottom7. Avoid CSS Expressions8. Make JavaScript and CSS External9. Reduce DNS Lookups10.Minify JavaScript11.Avoid Redirects12.Remove Duplicate Scripts13.Configure ETags14.Make AJAX Cacheable

By Steve Souders: http://stevesouders.com/hpws/rules.php

Most of these are implemented server side.

fredag 20. september 13

Page 86: Give Responsive Design a Mobile Performance Boost

THE RULES

1. Make Fewer HTTP Requests2. Use a Content Delivery Network3. Add an Expires Header4. Gzip Components5. Put Stylesheets at the Top6. Put Scripts at the Bottom7. Avoid CSS Expressions8. Make JavaScript and CSS External9. Reduce DNS Lookups10.Minify JavaScript11.Avoid Redirects12.Remove Duplicate Scripts13.Configure ETags14.Make AJAX Cacheable

By Steve Souders: http://stevesouders.com/hpws/rules.php

Most of these are implemented server side.

fredag 20. september 13

Page 87: Give Responsive Design a Mobile Performance Boost

POOR IMPLEMENTATION SLOWS RENDERING DOWN, BUT SPEED IS REALLY ABOUT HOW FAST THE USER CAN

ACHIEVE HIS GOALS

WHAT IS SPEED, ANYWAY?

fredag 20. september 13

Page 88: Give Responsive Design a Mobile Performance Boost

John Arne Sæteråstwitter : @jonarnes

http://www.slideshare.net/jonarnes/

THANK YOU

?

fredag 20. september 13