Doloto: Code Splitting for Web 2.0 Applications
-
Upload
genevieve-horne -
Category
Documents
-
view
38 -
download
1
description
Transcript of Doloto: Code Splitting for Web 2.0 Applications
Doloto:
Code Splitting for Web 2.0 Applications
Ben Livshits and Emre KicimanMicrosoft Research
Redmond, WA
Motivation
Web 2.0 is Upon Us
2
JavaScript+ DHTML
Client-sidecomputation
Server-sidecomputation
Client-siderendering
Static HTML
Web 1.0 → Web 2.0
3
Motivation
Distributed Applications
4
Server Clients
Run your code here
Motivation
Catch-22
5
Execution can’t start without
the code
Move code to client for
responsiveness
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
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%
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
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
Runtime Picture
10
Experiments
Training Phase
Instrument every function
Record the first-execute timestamp
Look for gaps to find clusters
11
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
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
Techniques
C1
C2
Code Rewriting
Rewrite JavaScript code one file at a time Recombine clusters into individual files
14
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
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
Techniques
Cluster Prefetching
17
Experiments
Application Benchmarks
Application Download SizeChi game 104
Bunny Hunt 16
Live.com 1,436
Live Maps 1,909
Google Spreadsheets 499
18
Experiments
Size Savings with Doloto
19
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
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