Polaris: Faster Page Loads Using Fine-grained Dependency Tracking

To load a web page, a browser must fetch and evaluate objects like HTML files and JavaScript source code. Evaluating an object can result in additional objects being fetched and evaluated. Thus, loading a web page requires a browser to resolve a dependency graph; this partial ordering constrains the sequence in which a browser can process individual objects. Unfortunately, many edges in a page's dependency graph are unobservable by today's browsers. To avoid violating these hidden dependencies, browsers make conservative assumptions about which objects to process next, leaving the network and CPU underutilized. We provide two contributions. First, using a new measurement platform called Scout that tracks fine-grained data flows across the JavaScript heap and the DOM, we show that prior, coarse-grained dependency analyzers miss crucial edges: across a test corpus of 200 pages, prior approaches miss 30% of edges at the median, and 118% at the 95th percentile. Second, we quantify the benefits of exposing these new edges to web browsers. We introduce Polaris, a dynamic client-side scheduler that is written in JavaScript and runs on unmodified browsers; using a fully automatic compiler, servers can translate normal pages into ones that load themselves with Polaris. Polaris uses fine-grained dependency graphs to dynamically determine which objects to load, and when. Since Polaris' graphs have no missing edges, Polaris can aggressively fetch objects in a way that minimizes network round trips. Experiments in a variety of network conditions show that Polaris decreases page load times by 34% at the median, and 59% at the 95th percentile.

[1]  Albert G. Greenberg,et al.  WebProphet: Automating Performance Prediction for Web Services , 2010, NSDI.

[2]  Yuchung Cheng,et al.  TCP fast open , 2011, CoNEXT '11.

[3]  Hari Balakrishnan,et al.  Mahimahi: Accurate Record-and-Replay for HTTP , 2015, USENIX Annual Technical Conference.

[4]  Matt Welsh,et al.  Flywheel: Google's Data Compression Proxy for the Mobile Web , 2015, NSDI.

[5]  Zhe Wu,et al.  Klotski: Reprioritizing Web Content to Improve User Experience on Mobile Devices , 2015, NSDI.

[6]  Seungjoon Lee,et al.  PARCEL: Proxy Assisted BRowsing in Cellular networks for Energy and Latency reduction , 2014, CoNEXT.

[7]  Dennis F. Galletta,et al.  Web Site Delays: How Tolerant are Users? , 2004, J. Assoc. Inf. Syst..

[8]  Allan Kuchinsky,et al.  Integrating user-perceived quality into Web server design , 2000, Comput. Networks.

[9]  David Wetherall,et al.  Demystifying Page Load Performance with WProf , 2013, NSDI.

[10]  Xi Liu,et al.  C3: Internet-Scale Control Plane for Video Quality Optimization , 2015, NSDI.

[11]  James Mickens Silo: Exploiting JavaScript and DOM Storage for Faster Page Loads , 2010, WebApps.

[12]  Rebecca E. Grinter,et al.  Measuring and Mitigating Web Performance Bottlenecks in Broadband Access Networks , 2014 .

[13]  Nick Feamster,et al.  Community contribution award -- Measuring and mitigating web performance bottlenecks in broadband access networks , 2013, Internet Measurement Conference.

[14]  Jon Howell,et al.  Mugshot: Deterministic Capture and Replay for JavaScript Applications , 2010, NSDI.

[15]  David Wetherall,et al.  How Speedy is SPDY? , 2014, NSDI.

[16]  Allan Kuchinsky,et al.  Quality is in the eye of the beholder: meeting users' requirements for Internet quality of service , 2000, CHI.

[17]  Vyas Sekar,et al.  Improving fairness, efficiency, and stability in HTTP-based adaptive video streaming with FESTIVE , 2012, CoNEXT '12.