Upgrade to Pro — share decks privately, control downloads, hide ads and more …

High Performance Mobile Web

High Performance Mobile Web

This talk explains best practices and techniques use to build high performance mobile sites. The talk covers a wide range of different topics centred on how to improve performance over the network and how to improve performance in the software (including both server side & client side).

James D Bloom

July 01, 2012
Tweet

More Decks by James D Bloom

Other Decks in Technology

Transcript

  1. Technical  lead  of  mobile  web  at  Be2air     Focusing

     on:    -­‐  High  Performance    -­‐  Reliability    -­‐  Wide  Device  Support    -­‐  Keeping  it  Simple    -­‐  Automated  TesEng   Mobile Web Expert ABOUT ME JAMES D BLOOM
  2. This talk…. 1.   Why  We  Should  Care  About  Performance?

      SoHware   More  Parallelism   Faster  Page  Rendering   Faster  Page  InteracEon   3.   Network   Reducing  Requests   Reducing  Bytes   Increasing  Bandwidth  Efficiency   Reducing  Latency   2.  
  3. +1s -4% revenue Bing WHY CARE? -2.2s +15% downloads Firefox

    0.4 -> 0.9s -25% searches Google -5s +12% revenue -50% hardware Shopzilla each -100ms +1% revenue Wallmart & Amazon
  4. h"p://www.keynote.com/keynote_compe11ve_research/performance_indices/mobile/retail-­‐world   5.41   6.03   7.65   7.85  

    8.64   9.21   10.36   11.43   12.49   15.86   27.16   44.67   51.38   0   10   20   30   40   50   60   LOAD TIME (in seconds) 47% expect <2s 40% abandon if >3s
  5. CORELATION TO LOAD TIME Total   Requests   Image  

    Requests   Total  Xfer   Size   Image  Xfer   Size   Domains   TOTAL REQUESTS 0.46 IMAGE REQUESTS 0.44 TOTAL XFER SIZE 0.40 IMAGE XFER SIZE 0.37 Reduce Requests DOMAINS 0.37 h"p://mobile.h"parchive.org/   Based  on:  Alexa  Top  1,000,000  Sites  
  6. COMBINE REQUESTS - BUNDLING •  JavaScript  Bundle   –  Combine

     all  files  into  single  bundle   •  CSS  Bundle   –  Combine  all  files  into  single  bundle    
  7. COMBINE REQUESTS - INLINING •  Inlining   –  dataURI  for

     external  resources   –  Base64  larger  by  8/6  
  8. COMBINE REQUESTS - INLINING •  First  Load:   –  inline

     resources  and  set  cookie   –  put  resources  in  localStorage  and  update  cookie   •  Subsequent  Load:   –  check  cookie   •  if  updated   –  load  resources  from  localStorage  (at  top  of  page)   •  if  iniEal  value  -­‐>  no  JavaScript  or  localStorage   –  return  with  resources  as  external  links   •  Bing   –  1st  request  54.9  KB   –  2nd  request  5.5  KB  
  9. AVOID REQUESTS •  Avoid  redirects  –  71%  of  mobile  sites

     have  3xx   –  or  at  least  cache  them   •  Images   –  CSS3   •  gradient,  rounded  corners,  drop  shadow,  text  shadow   –  Avoid  animated  gifs   •  staEc  image  +  JS   •  Load  (and  eval)  on  demand   –  Images  -­‐>  google  image  search   –  JS  -­‐>  gmail  
  10. RESPONSE SIZE (in kB) 358   112   33  

    23   10   Images   Scripts   HTML   Stylesheets   Other   IMAGES 67% SCRIPTS 21% HTML 6% STYLESHEETS 4% OTHER 2% Reduce Image Size h"p://mobile.h"parchive.org/   Based  on:  Alexa  Top  1,000,000  Sites  
  11. REDUCING BYTES – ADAPTIVE RESOURCES •  AdapEve  Images   – 

    UA  sniffing  or  media  queries   –  Major  breakpoints  or  server  side  scaling   •  AdapEve  JavaScript   –  UA  sniffing  for  device  specific  JS   •  AdapEve  CSS   –  Media  queries  for  device  specific  CSS  
  12. REDUCING BYTES - MINIFY •  Minify  JS  &  CSS  

    –  Typically  during  bundling   •  Mini  JS  framework   –  don’t  send  desktop  JS  to  mobile  
  13. REDUCING BYTES •  Compression   –  Use  gzip  for  text

     resources   –  Maximize  lossless  compression  for  images   •  Reduce  Upload   –  Reduce  /  remove  cookies   –  Server-­‐side  cookie   –  Cookie  Free  Domain   •  staEc  resources   •  CDN   •  HIJAX   –  Highjack  full  page  request   –  AJAX  to  replace  <body/>   –  Avoids  reloading  CSS,  JS,  background  images  
  14. PARALLELIZE DOWNLOADS •  CSS  at  the  top   –  download

     background  images   –  avoid  FOUC   •  JS  at  the  booom   –  avoid  SPOF  
  15. EARLY DOWNLOAD •  Eager  loading   –  Load  staEc  pages

     eagerly   –  Store  in  localStorage   –  Uses  spare  bandwidth  
  16. CACHING •  Caching   –  Caching  headers   •  Cache-­‐Control,

     Expires,  Vary,  Last-­‐Modified,  ETag   –  Finger  print   •  >  1y  cache   •  JS,  CSS  and  images   •  i.e.  build  2932  -­‐>  all_2932_.css   –  Make  pages  cacheable   •  Avoid  cookies  &  headers   •  Use  path  variables   •  Separate  out  variable  content   –  iframe     –  AJAX   –  How  variable  is  content?     •  Always  consider  >  1s  cache  
  17. CACHING •  Types  of  Cache   –  Content  Delivery  Network

     /  Edge  Cache   •  JS,  CSS  and  images   –  Reverse  Proxies   –  Browser  Cache   •  Limited  space,  regularly  fully  cycled   –  More  control  but  harder  to  use   •  ApplicaEon  Cache   •  Local  Storage   •  WebSQL  /  IndexedDB  
  18. PARALLEL DOWNLOAD •  Flush  <head/>  early   –  CSS  in

     parallel   –  CSS  background  images  (sprites)  in  parallel  
  19. PARALLEL SERVICE CALLS render view build model service & DB

    calls flush <head/> controller task executor view flush <body/> •  Parallelize  service  calls  /  DB  queries   •  Render  view  (and  flush  <head/>)  in  parallel  
  20. FASTER PAGE RENDERING •  Simple  DOM   •  Efficient  CSS

     selectors   –  avoid  generic  matches  on  right  side:   –  use  ids  or  specific  classes:   •  Minimize  reflows   –  CSS  in  <head/>   –  <img/>  with  height  and  width  
  21. FASTER PAGE INTERACTION •  Avoid  blocking  UI  Thread   – 

    Split  tasks   •  Use  events   •  setTimeout   –  Web  Workers     •  data  only     •  no  UI  interacEon   execuEon   button 1 clicked button 1 onclick button 1 UI depressed button 1 UI unpressed button 2 onclick button 2 UI depressed button 2 UI unpressed button 2 clicked UI Thread UI Queue
  22. FASTER PAGE INTERACTION •  SyntheEc  events   –  Touch  300ms

     delay   •  Timers   –  Lots  >1s   –  Few  <500ms   –  Use  single  global  repeaEng  Emer  for  mulEple  tasks   •  Pre-­‐execute   –  Use  middle  Eer  as  much  as  possible  
  23. This talk…. 1.   Why  We  Should  Care  About  Performance?

      SoHware   More  Parallelism   Faster  Page  Rendering   Faster  Page  InteracEon   3.   Network   Reducing  Requests   Reducing  Bytes   Increasing  Bandwidth  Efficiency   Reducing  Latency   2.