With conventional web page load metrics (e.g., Page Load Time) being blamed for deviating from actual user experiences, in recent years a more sensible and complex metric called Speed Index (SI) has been widely adopted to measure the user’s quality of experience (QoE). In brief, SI indicates how quickly a page is filled up with above-the-fold visible elements (or crucial elements for short). Till now, however, SI has been used as an elusive hindsight for performance evaluation, rather than an explicit heuristic to direct page loading. To demystify this, we examine the entire load process of various pages and ascribe such incapability to three-fold fundamental uncertainties in terms of network, browser execution, and viewport size. In this paper, we design SipLoader, an SI-oriented page loader through a novel cumulative reactive scheduling framework. It does not attempt to deal with uncertainties in advance or in one shot, but “repairs” the anticipated (nearly) SI-optimal scheduling when uncertainties actually occur, based on efficient design that fully exploits the cumulative nature of SI calculation. Evaluations show that SipLoader improves the median SI by 41%, and provides 1.43×–1.99× more benefits than state-of-the-art solutions with little computation and traffic overhead.
Implementation & Data
SipLoader is an SI-oriented page loader. It implements the cumulative predictive-reactive scheduling framework through three key techniques, i.e., Dependency Mmerged Greedy Inference, Predictive Element Region Forest, and Event-Driven Reactive Co-Scheduling.
We provide the prototype system on GitHub as well as the measurement data on Google Drive.
|corpus||collect web pages for rewriting||collector.py|
|debugger||replay the rewritten pages||tracing.js|
|dependency_base||track dependencies among web page objects||dependency_track_conductor.py|
|optimal||compare dependency-merged greedy inference with the topological sort-based approach||agdp.js|
|per||generate predictive element regions||per_conductor.py|
|scheduler||rewrite web pages||clean.sh|