<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Speedometer 1.0</title>
<link rel="stylesheet" href="resources/main.css">
<script src="resources/main.js" defer></script>
<script src="resources/benchmark-runner.js" defer></script>
<script src="resources/benchmark-report.js" defer></script>
<script src="../resources/statistics.js" defer></script>
<script src="resources/tests.js" defer></script>
</head>
<body>
<main>
<a id="logo-link" href="javascript:showHome()"><img id="logo" src="resources/logo.png"></a>
<section id="home" class="selected">
<p>
Speedometer is a browser benchmark that measures the responsiveness of Web applications.
It uses demo web applications to simulate user actions such as adding to-do items.
</p>
<p id="screen-size-warning"><strong>
Your browser window is too small. For most accurate results, please make the view port size at least 850px by 650px.<br>
It's currently <span id="screen-size"></span>.
</strong></p>
<div class="buttons">
<button onclick="startTest()">Start Test</button>
</div>
<p class="show-about"><a href="javascript:showAbout()">About Speedometer</a></p>
</section>
<section id="running">
<div id="testContainer"></div>
<div id="progress"><div id="progress-completed"></div></div>
<div id="info"></div>
</section>
<section id="summarized-results">
<h1>Runs / Minute</h1>
<div class="gauge"><div class="window"><div class="needle"></div></div></div>
<hr>
<div id="result-number"></div>
<div id="confidence-number"></div>
<div class="buttons">
<button onclick="startTest()">Test Again</button>
<button class="show-details" onclick="showResultDetails()">Details</button>
</div>
</section>
<section id="detailed-results">
<h1>Detailed Results</h1>
<table class="results-table"></table>
<table class="results-table"></table>
<div class="arithmetic-mean"><label>Arithmetic Mean:</label><span id="results-with-statistics"></span></div>
<div class="buttons">
<button onclick="startTest()">Test Again</button>
<button id="show-summary" onclick="showResultsSummary()">Summary</button>
</div>
<p class="show-about"><a href="javascript:showAbout()">About Speedometer</a></p>
</section>
<section id="about">
<h1>About Speedometer</h1>
<p>Speedometer measures simulated user interactions in web applications.</p>
<p>
The current benchmark uses TodoMVC to simulate user actions for adding, completing, and removing to-do items.
Speedometer repeats the same actions using DOM APIs —
a core set of web platform APIs used extensively in web applications —
as well as six popular JavaScript frameworks: Ember.js, Backbone.js, jQuery, AngularJS, React, and Flight.
Many of these frameworks are used on the most popular websites in the world, such as Facebook and Twitter.
The performance of these types of operations depends on the speed of the DOM APIs, the JavaScript engine,
CSS style resolution, layout, and other technologies.
</p>
<p>
Although user-driven actions like mouse movements and keyboard input cannot be accurately emulated in JavaScript,
Speedometer does its best to faithfully replay a typical workload within the demo applications.
To make the run time long enough to measure with the limited precision,
we synchronously execute a large number of the operations, such as adding one hundred to-do items.
</p>
<p>
Some browser engines use an optimization strategy of doing some work asynchronously to reduce the run time of synchronous operations.
While returning control back to JavaScript execution as soon as possible is worth pursuing,
a holistic, accurate measurement of web application performance involves measuring
when these related, asynchronous computations actually complete.
Thus, Speedometer measures the time browser spends executing those asynchronous tasks in Speedometer,
estimated as the time between when a zero-second delay timer is scheduled and when it is fired.</p>
<p class="note">
<strong>Note:</strong> Speedometer is not meant to compare the performance of different JavaScript frameworks.
The mechanism we use to simulate user actions is different for each framework,
and we’re forcing frameworks to do more work synchronously than needed in some cases to ensure run time can be measured.
</p>
</section>
</main>
</body>
</html>