Mobile Web Speed Bumps

101
Mobile Web Speed Bumps Don't let these problems slow your app down Nicholas C. Zakas Presentation Architect, Yahoo! @slicknet

description

As browsers explode with new capabilities and migrate onto devices users can be left wondering, “what’s taking so long?” Learn how HTML, CSS, JavaScript, and the web itself conspire against a fast-running application and simple tips to create a snappy interface that delight users instead of frustrating them.

Transcript of Mobile Web Speed Bumps

Page 1: Mobile Web Speed Bumps

Mobile Web Speed BumpsDon't let these problems slow your app down

Nicholas C. ZakasPresentation Architect, Yahoo!@slicknet

Page 2: Mobile Web Speed Bumps

Who's this guy?

Presentation Architect

Contributor,Creator of YUI Test

Author Lead Author Contributor Lead Author

Page 3: Mobile Web Speed Bumps

http://www.flickr.com/photos/veggiefrog/3435380297/

Page 4: Mobile Web Speed Bumps

http://www.flickr.com/photos/fkmr/48131497/

Page 5: Mobile Web Speed Bumps

http://www.flickr.com/photos/veggiefrog/3435380297/

➔Latency➔Device➔Testing

Page 6: Mobile Web Speed Bumps

Network latency is a time delay in deliveringdata to the client device

Data transmission over the air always has latency

Page 7: Mobile Web Speed Bumps

http://developer.yahoo.com/blogs/ydn/posts/2009/10/a_engineers_gui/

Page 8: Mobile Web Speed Bumps

http://developer.yahoo.com/blogs/ydn/posts/2009/10/a_engineers_gui/

Page 9: Mobile Web Speed Bumps

DNS

Web

Page 10: Mobile Web Speed Bumps

DNS

Web

Cell Co.

Page 11: Mobile Web Speed Bumps
Page 12: Mobile Web Speed Bumps
Page 13: Mobile Web Speed Bumps
Page 14: Mobile Web Speed Bumps

http://www.flickr.com/photos/calliope/83867359/

Imagesreplace 'em with CSS where possible

Page 15: Mobile Web Speed Bumps

Use only CSS for simple imagesGradients | Rounded Corners | Drop Shadows | Text Shadows

Page 16: Mobile Web Speed Bumps

Browser creates images = 0 HTTP requests

Page 17: Mobile Web Speed Bumps

http://www.schillmania.com/content/entries/2009/css3-and-the-future/

-webkit-border-radius: 16px;border-radius: 16px;-webkit-box-shadow: 0 8px 4px rgba(192,192,192,0.5);box-shadow: 0 8px 4px rgba(192,192,192,0.5);background-image:-webkit-gradient(linear, 0% 0%, 0% 90%, from(rgba(64,64,64,0.75)), to(rgba(192,192,192,0.9)));

NoImages!

Page 18: Mobile Web Speed Bumps

http://www.flickr.com/photos/calliope/83867359/

Imagesreplace 'em with CSS where possibleput 'em inline using data URIs

Page 19: Mobile Web Speed Bumps

http://www.nczonline.net/blog/2009/10/27/data-uris-explained/

Page 20: Mobile Web Speed Bumps

data:[<mime type>][;charset=<charset>][;base64],<encoded data>

Page 21: Mobile Web Speed Bumps

data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7

Page 22: Mobile Web Speed Bumps

<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7">

Data URIs can be embedded in HTMLNo more extra HTTP requests for images!

Page 23: Mobile Web Speed Bumps

.icon1 { background: url(data:image/png;base64,<data>) no-repeat;}.icon2 { background: url(data:image/png;base64,<data>) no-repeat;}

Data URIs can be embedded in CSSNo more extra HTTP requests for images!

Page 24: Mobile Web Speed Bumps

But I alreadyhave so many CSS files that

reference images!

http://www.flickr.com/photos/12714995@N03/5069508897/

Page 25: Mobile Web Speed Bumps

http://github.com/nzakas/cssembed

Page 26: Mobile Web Speed Bumps

java -jar cssembed-0.3.6.jar -o styles_data_uris.css styles.css

Page 27: Mobile Web Speed Bumps

Data URIs are well-supported across smartphone browsers

Page 28: Mobile Web Speed Bumps

http://www.flickr.com/photos/drb62/2543573955/

Data URIs not supported by• Nokia Series 40• Myriad/OpenWave• Internet Explorer Mobile• Motorola Browser

Page 29: Mobile Web Speed Bumps

http://www.flickr.com/photos/calliope/83867359/

Imagesreplace 'em with CSS where possibleput 'em inline using data URIsif all else fails, make 'em small

Page 30: Mobile Web Speed Bumps

320x480 768x1024

Page 31: Mobile Web Speed Bumps

Large images not needed

Page 32: Mobile Web Speed Bumps

http://tinysrc.net/

Page 33: Mobile Web Speed Bumps

<img src="http://i.tinysrc.mobi/http://example.com/myimage.png" alt="My image">

Automatically resizes images to viewport

Page 34: Mobile Web Speed Bumps

<img src="http://i.tinysrc.mobi/320/240/http://example.com/myimage.png" alt="My image" width="320" height="240">

Automatically resizes image to 320x240

Page 35: Mobile Web Speed Bumps
Page 36: Mobile Web Speed Bumps

Put JavaScript and CSS inline*

* But only on first page view

Page 37: Mobile Web Speed Bumps
Page 38: Mobile Web Speed Bumps

http://m.bing.com

Page 39: Mobile Web Speed Bumps

Request #1146 KB

Request #214 KB

Page 40: Mobile Web Speed Bumps

RMSM=JApp.Home.DE384EBF~JUX.UXBaseControls.65310C41~JUX.FrameworkCore.53E1E635~JUX.PublicJson.540180A4~JUX.Compat.0907AAD4~JUX.MsCorlib.172D90C3~CUX.SiteLowRes.C8A1DA4E~CApp.Home.FD66E1A3~CUX.Keyframes.B8625FEE~CUX.Site.18BDD93

Page 41: Mobile Web Speed Bumps

RMSM= Japp.Home.DE384EBF~ JUX.UXBaseControls.65310C41~ JUX.FrameworkCore.53E1E635~ JUX.PublicJson.540180A4~ JUX.Compat.0907AAD4~ JUX.MsCorlib.172D90C3~ CUX.SiteLowRes.C8A1DA4E~ Capp.Home.FD66E1A3~ CUX.Keyframes.B8625FEE~ CUX.Site.18BDD93

Page 42: Mobile Web Speed Bumps
Page 43: Mobile Web Speed Bumps

<style data-rms="save" id="CUX.Site.18BDD936" rel="stylesheet" type="text/css">...</style><script data-rms="save" id="JUX.UXBaseControls.65310C41" type="text/javascript">...</script>

First Request

Page 44: Mobile Web Speed Bumps

<script type="text/javascript">RMS.Load('CUX.Site.18BDD936')</script><script type="text/javascript">RMS.Load('JUX.UXBaseControls.65310C41')</script>

Second Request

Page 45: Mobile Web Speed Bumps

How It Works1.On first page load, inline all scripts and styles2.Extract scripts and styles from page and store

in localStorage3.Set cookie with Ids of the scripts and styles in

localStorage4.On next page load, look at cookies5.Output scripts instructing the browser to load

that resource from localStorage

Page 46: Mobile Web Speed Bumps

//extract inline script contentsvar scriptNode = document.querySelector("script");var scriptText = scriptNode.text;//extract inline style contentsvar styleNode = document.querySelector("style");var styleText = styleNode.innerHTML;

Extracting From The DOM

Page 47: Mobile Web Speed Bumps
Page 48: Mobile Web Speed Bumps

DownloadRedirect

40% of timeon redirect

Page 49: Mobile Web Speed Bumps

http://www.flickr.com/photos/veggiefrog/3435380297/

➔Latency➔Device➔Testing

Page 50: Mobile Web Speed Bumps

Processor 2.2-2.4 GHz 1 GHz 1 GHz 1 GHz 1 GHzRAM 2 GB 512 MB 512 MB 512 MB 512 MBStorage 320-500 GB 16-32 GB 8 GB 8 GB 16-64 GB

Mac MiniiPhone 4 Droid X

DroidIncredible

iPad 2

Page 51: Mobile Web Speed Bumps

http://www.flickr.com/photos/antonfomkin/3046849320/

Page 52: Mobile Web Speed Bumps

Keep JavaScript small

Page 53: Mobile Web Speed Bumps
Page 54: Mobile Web Speed Bumps
Page 55: Mobile Web Speed Bumps
Page 56: Mobile Web Speed Bumps

All browsers now haveoptimizing JavaScript engines

Tracemonkey/JaegarMonkey

(3.5+)

V8(all)

Nitro(4+)

Chakra (9+)

Karakan(10.5+)

Page 57: Mobile Web Speed Bumps

http://ie.microsoft.com/testdrive/benchmarks/sunspider/default.html

Page 58: Mobile Web Speed Bumps
Page 59: Mobile Web Speed Bumps
Page 60: Mobile Web Speed Bumps

http://jeftek.com/1942/motorola-xoom-sunspider-results/

Page 61: Mobile Web Speed Bumps
Page 62: Mobile Web Speed Bumps

JavaScript Execution=

CPU Processing=

Battery Consumption

Page 63: Mobile Web Speed Bumps

Don't even think about using JavaScript-based animations

CSS-based only

http://www.flickr.com/photos/eschipul/260392040/

Page 64: Mobile Web Speed Bumps
Page 65: Mobile Web Speed Bumps

Hardware Acceleration(Compositing)

http://www.flickr.com/photos/pagedooley/3493267443/

Page 66: Mobile Web Speed Bumps

Hardware accelerated CSS animations

Page 67: Mobile Web Speed Bumps

No hardware accelerationbefore Android 3.0

Page 68: Mobile Web Speed Bumps

Be careful with CSS

Page 69: Mobile Web Speed Bumps

.some-element { -webkit-transform: rotate(0);}

Trigger Compositing

Any transformworks!

Page 70: Mobile Web Speed Bumps

Non-composited elements work as you expect

http://www.flickr.com/photos/kkoshy/2825871499/

Page 71: Mobile Web Speed Bumps

Composited elements become imagesin memory

http://www.flickr.com/photos/kkoshy/2825871499/

Page 72: Mobile Web Speed Bumps

Each composited element takes upwidth x height x 4 bytes

http://www.flickr.com/photos/kkoshy/2825871499/

Page 73: Mobile Web Speed Bumps

Too many composited elements=

High memory usage=

Slow-moving UI

Page 74: Mobile Web Speed Bumps

iOS doesn't support memory paging

Page 75: Mobile Web Speed Bumps

https://bugs.webkit.org/show_bug.cgi?id=56917

Page 76: Mobile Web Speed Bumps

CSS GradientsCSS Gradients(Keep 'em small)(Keep 'em small)

Page 77: Mobile Web Speed Bumps

CSS GradientsCSS Gradients(i.e. no full page backgrounds)(i.e. no full page backgrounds)

Page 78: Mobile Web Speed Bumps

Radial gradients are heavyRadial gradients are heavyUse cautionUse caution

Page 79: Mobile Web Speed Bumps

If your app is sluggish, try If your app is sluggish, try replacing CSS gradients withreplacing CSS gradients with

data URIs or imagesdata URIs or images

Page 80: Mobile Web Speed Bumps

Keep the DOM smallRemove unused elements

Page 81: Mobile Web Speed Bumps

http://www.flickr.com/photos/veggiefrog/3435380297/

➔Latency➔Device➔Testing

Page 82: Mobile Web Speed Bumps

Memory not capped!

Page 83: Mobile Web Speed Bumps

http://www.blaze.io/mobile/

Page 84: Mobile Web Speed Bumps
Page 85: Mobile Web Speed Bumps
Page 86: Mobile Web Speed Bumps
Page 87: Mobile Web Speed Bumps

http://stevesouders.com/mobileperf/mobileperfbkm.php

Page 88: Mobile Web Speed Bumps
Page 89: Mobile Web Speed Bumps
Page 90: Mobile Web Speed Bumps
Page 91: Mobile Web Speed Bumps
Page 92: Mobile Web Speed Bumps
Page 93: Mobile Web Speed Bumps
Page 94: Mobile Web Speed Bumps

http://jdrop.org

Page 95: Mobile Web Speed Bumps
Page 96: Mobile Web Speed Bumps
Page 97: Mobile Web Speed Bumps

Summary

Page 98: Mobile Web Speed Bumps

http://www.flickr.com/photos/veggiefrog/3435380297/

➔Latency➔Device➔Testing

Page 99: Mobile Web Speed Bumps

Images | JavaScript | CSS | DOM

Page 100: Mobile Web Speed Bumps

http://www.flickr.com/photos/brent_nashville/201143283/

BalanceThis is a new frontier.

The investigation has only just started.

Test, test, test.

Share.

Page 101: Mobile Web Speed Bumps

Etcetera• My blog:

www.nczonline.net

• Twitter:@slicknet

• These Slides:http://slideshare.net/nzakas/