Doloto: Code Splitting for Web 2.0 Applications

22
Doloto: Code Splitting for Web 2.0 Applications Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA

description

Ben Livshits and Emre Kiciman Microsoft Research Redmond, WA. Doloto: Code Splitting for Web 2.0 Applications. Web 2.0 is Upon Us. Web 1.0 → Web 2.0. Server-side computation. JavaScript + DHTML. Static HTML. Client-side computation. Client-side rendering. Distributed Applications. - PowerPoint PPT Presentation

Transcript of Doloto: Code Splitting for Web 2.0 Applications

Page 1: Doloto:  Code Splitting for Web 2.0 Applications

Doloto:

Code Splitting for Web 2.0 Applications

Ben Livshits and Emre KicimanMicrosoft Research

Redmond, WA

Page 2: Doloto:  Code Splitting for Web 2.0 Applications

Motivation

Web 2.0 is Upon Us

2

Page 3: Doloto:  Code Splitting for Web 2.0 Applications

JavaScript+ DHTML

Client-sidecomputation

Server-sidecomputation

Client-siderendering

Static HTML

Web 1.0 → Web 2.0

3

Page 4: Doloto:  Code Splitting for Web 2.0 Applications

Motivation

Distributed Applications

4

Server Clients

Run your code here

Page 5: Doloto:  Code Splitting for Web 2.0 Applications

Motivation

Catch-22

5

Execution can’t start without

the code

Move code to client for

responsiveness

Page 6: Doloto:  Code Splitting for Web 2.0 Applications

Motivation

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, …)

6

Page 7: Doloto:  Code Splitting for Web 2.0 Applications

Motivation

Lots of JavaScript Code

7

www.live.com

spreadsheets.google

maps.live

chi.lexigame

hotmail

gmail

dropthings

maps.google

pageflakes

bunny hunt

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%

Page 8: Doloto:  Code Splitting for Web 2.0 Applications

Motivation

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

8

Page 9: Doloto:  Code Splitting for Web 2.0 Applications

Techniques

1. [training] Runtime training to collect access profile

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

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

Doloto: the Steps

9

Page 10: Doloto:  Code Splitting for Web 2.0 Applications

Runtime Picture

10

Page 11: Doloto:  Code Splitting for Web 2.0 Applications

Experiments

Training Phase

Instrument every function

Record the first-execute timestamp

Look for gaps to find clusters

11

Page 12: Doloto:  Code Splitting for Web 2.0 Applications

Techniques

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

12

Page 13: Doloto:  Code Splitting for Web 2.0 Applications

Motivation

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

13

Page 14: Doloto:  Code Splitting for Web 2.0 Applications

Techniques

C1

C2

Code Rewriting

Rewrite JavaScript code one file at a time Recombine clusters into individual files

14

Page 15: Doloto:  Code Splitting for Web 2.0 Applications

Techniques

Automated Function Splitting

15

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);}

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

Page 16: Doloto:  Code Splitting for Web 2.0 Applications

Techniques

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

16

Page 17: Doloto:  Code Splitting for Web 2.0 Applications

Techniques

Cluster Prefetching

17

Page 18: Doloto:  Code Splitting for Web 2.0 Applications

Experiments

Application Benchmarks

Application Download SizeChi game 104

Bunny Hunt 16

Live.com 1,436

Live Maps 1,909

Google Spreadsheets 499

18

Page 19: Doloto:  Code Splitting for Web 2.0 Applications

Experiments

Size Savings with Doloto

19

Page 20: Doloto:  Code Splitting for Web 2.0 Applications

Experiments

Runtime Savings with Doloto

20Chi 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 21: Doloto:  Code Splitting for Web 2.0 Applications

Conclusion

Doloto: effective profile-driven optimization

Our approach is general: Silverlight

Enables larger more complex distributed apps

Dynamic code loading for distributed applications of the future

21

Page 22: Doloto:  Code Splitting for Web 2.0 Applications

Contact us

Ben Livshits ([email protected])

22

Doloto MSR _