doloto: code splitting for ajax applications

11
Doloto: Code Splitting for AJAX Applications Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA

Upload: plato

Post on 23-Feb-2016

27 views

Category:

Documents


0 download

DESCRIPTION

Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA. Doloto: Code Splitting for AJAX Applications . A Web 2.0 Application Disected. 1+ MB code. Talks to 14 backend services (traffic, images, directions, ads, …). 70,000+ lines of JavaScript code downloaded. 2,855 Functions. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Doloto:  Code  Splitting for  AJAX  Applications

Doloto:

Code Splitting for AJAX Applications

Ben Livshits and Emre KicimanMicrosoft Research

Redmond, WA

Page 2: Doloto:  Code  Splitting for  AJAX  Applications

A Web 2.0 Application Disected

70,000+ lines of JavaScript code

downloaded2,855 Functions

1+ MB codeTalks to 14 backend

services(traffic, images,

directions, ads, …)

Page 3: Doloto:  Code  Splitting for  AJAX  Applications

AJAX Apps Have Lots of Code

Up to 90% of a

Web 2.0 app is

JavaScript code!

3

Page 4: Doloto:  Code  Splitting for  AJAX  Applications

Why AJAX?

Client-side JavaScript code Reduces latency and improves user experience Avoids constant network round trips

Catch-22 Takes a while to transfer code to the client Code can be MBs in size Application execution is blocked until code arrives

Page 5: Doloto:  Code  Splitting for  AJAX  Applications

Motivation for Doloto

Idea behind Doloto Start with a small piece of code on the client Download required code on demand (pull) Send code when bandwidth available (push)

Leads to better application responsiveness Interleave code download & execution Faster startup times Rarely executed code is rarely downloaded

5

Page 6: Doloto:  Code  Splitting for  AJAX  Applications

1. [training] Runtime training to collect access profile (AjaxView Fiddler plugin)

2. [rewriting] Function rewriting or “stubbing” for on-demand code loading

3. [prefetch] Background prefetch of clusters as the application is running

Doloto Training Tool

Page 7: Doloto:  Code  Splitting for  AJAX  Applications

1. [training] Runtime training to collect access profiles

2. [rewriting] Function rewriting or “stubbing” for on-demand code loading

3. [prefetch] Background prefetch of clusters as the application is running

Automated Function Splitting

var g = 10;function f1(){ var x=g+1; … … … … … return …;}

var g = 10;

var real_f1;function f1() { if(!real_f1){ var code = load(“f1”); real_f1 = eval(code); f1 = real_f1; } return real_f1.apply(this, arguments);}

7eval($exp(“f1”), “”); // 21 chars

Page 8: Doloto:  Code  Splitting for  AJAX  Applications

Architecture of Doloto

1. [training] Runtime training to collect access profiles

2. [rewriting] Function rewriting or “stubbing” for on-demand code loading

3. [prefetch] Background prefetch of clusters as the application is running

Page 9: Doloto:  Code  Splitting for  AJAX  Applications

Size Savings with Doloto

Page 10: Doloto:  Code  Splitting for  AJAX  Applications

Runtime Savings with Doloto

Chi game Bunny Hunt Live.com Live Maps Google Sp’sheet0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

50kbs/300ms 300kbs/300ms 300kbs/50ms

Page 11: Doloto:  Code  Splitting for  AJAX  Applications

Contact us

Ben Livshits ([email protected])

Doloto MSR _