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

Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

Doloto:

Code Splitting for AJAX Applications

Ben Livshits and Emre KicimanMicrosoft Research

Redmond, WA

Page 2: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

A Web 2.0 Application Disected

70,000+ lines of JavaScript code

downloaded2,855 Functions

1+ MB code

Talks to 14 backend services

(traffic, images,directions, ads, …)

Page 3: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

AJAX Apps Have Lots of Code

Up to 90% of a

Web 2.0 app is

JavaScript code!

3

Page 4: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

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: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

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: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

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: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

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: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

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: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

Size Savings with Doloto

Page 10: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

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: Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA.

Contact us

Ben Livshits ([email protected])

Doloto MSR _