using node.js to improve the performance of mobile apps ... · pdf fileusing node.js to...

Post on 01-Feb-2018

251 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Using Node.js to improve the performance of

Mobile apps and Mobile web

Tom Hughes-Croucher

@sh1mmer

@sh1mmer

Who is Tom?

• Wrote W3C Standards

• 10+ years in the web industry

• Worked on projects for: Tesco, NASA, Walmart, MySpace, etc

• ~5 years at Yahoo! including .com

• Node team at Joyent

Scalable Server-Side Code with JavaScript

Tom Hughes-Croucher

NodeUp and Running

@sh1mmer

This is a talk about why cell phones suck.

@sh1mmer

@sh1mmer

Radio waves suck(at least compared to fibre or copper)

@sh1mmer

Radio vs. buildings

@sh1mmer

@sh1mmer

@sh1mmer

@sh1mmer

@sh1mmer

@sh1mmer

http://www.webperformancetoday.com/2012/04/02/mobile-versus-desktop-latency/

Desktop Mobile

@sh1mmerOokla/speedtest.net

via http://www.slideshare.net/patrickmeenan/velocity-2012-taming-the-mobile-beast/22

@sh1mmer

Effect of latency on servers

@sh1mmer

Shielding Frontends

@sh1mmer

nginxhaproxy

ATSvarnish

frontends web services/ data

@sh1mmer

var client = net.connect(80, domain, function() { client.write("GET / HTTP/1.1\r\n"); t1 = (new Date()).getTime(); });

client.on('end', function() { t2 = (new Date()).getTime(); output.write(domain + ' ' + ((t2-t1)/1000) + 's\n'); });

@sh1mmer

macupdate.com 442.3uzai.com 403.658wired.jp 238.848facilisimo.com 205.159mycokerewards.com 202.757rbc.cn 192.354moviesmobile.net 183.157stop55.com 145.927dir.bg 137.982carrefour.fr 112.789sifyitest.com 111.171

Sample of Alexa 5000

@sh1mmer

Event-driven Frontends

@sh1mmer

Client → Server Server → DB

Computation Computation

@sh1mmer

Not an event frontend

@sh1mmer

@sh1mmer

Server

@sh1mmer

Request

@sh1mmer

@sh1mmer

Event-driven frontend

@sh1mmer

Place-holder

@sh1mmer

@sh1mmer

SharedWork

Resources

@sh1mmer

Memory operations

@sh1mmer

var x = "I am a string"

~1ns Running 1 instruction2ns Data from l1 cpu cache5ns Data from l2 cpu cache80ns Data from ram

@sh1mmer

@sh1mmer

Mobile latency

@sh1mmer

@sh1mmerCat

100 Blue Whales

@sh1mmer

"They went from running 15 servers with 15 instances (virtual servers) on each physical machine, to just four instances that can handle double the traffic."

http://venturebeat.com/2011/08/16/linkedin-node/

@sh1mmer

Not just simple applications

@sh1mmer

@sh1mmer

@sh1mmer

First page load vs. Client MVC

@sh1mmer

@sh1mmer

Bandwidth

Latency Device capability

@sh1mmer

Barfing data at 3G

@sh1mmer

@sh1mmer

@sh1mmer

Clientside templating

@sh1mmer

@sh1mmer

Node.js allows you to tune rendering between client and server based on the network.

@sh1mmer

HTML JSON

More bandwidth

Less client processing

Less bandwidth

More client processing

Battery friendly Cheaper for you bandwidth/server

Cheaper for them bandwidth

@sh1mmer

Challenges

• JSON - fast object / slow render

• HTML - fast render / slow objects

• If we use HTML where do we manage our model?

• If we use JSON does rendering matter?

@sh1mmer

Identifying use cases

• "Client-side apps" - read/write data on client

• "Render-only apps" - mostly read data on client

@sh1mmer

Summary

• Node.js allows you to:

• Manage resources with unreliable mobile data connections

• Choose where to apply rendering

• Pick the right rendering solution for the right scenario

@sh1mmer

Demo time.

Questions@sh1mmer

top related