So how does this thing work?

1. Roundtrip measurements

We define round trip time as the time taken from the user initiating a resource request to when that resource is completely available for the user to interact with. We limit our measurements only to HTML page type resources.

The round trip time is therefore the time from the user clicking on a link to the page referenced by that link becoming usable by the user. For most cases, this is as good as measuring the time from the previous page’s onbeforeunload event firing to the current page’s onload event firing. In some cases this may be different, but we let the developer determine those events.

This is how we measure:

2. Bandwidth & Latency measurements

Bandwidth and latency are measured by downloading fixed size images from a server and measuring the time it took to download them. We run it in the following order:

We choose image sizes so that we can narrow down on a bandwidth range as soon as possible. See the code comments in boomerang.js for full details.


  1. We don't actually abort at this point, but give the developer the ability to salvage the moment by setting his/her own start time. This is most useful when the developer isn't measuring full page load time, but possibly the load time of some dynamic content loaded via JavaScript.
  2. We offer the developer the ability to not abort at this point, but instead pass all URLs to the back end and let the server decide whether to discard the beacon or not. This is useful for sites that have a login page behind SSL and possibly redirect to the login page if the user clicks on certain links. In this case there might either be no referrer, or the referrer may not match.
  3. This value is configured using the BW.nruns parameter. See Howto #6 for details on configuring boomerang.
  4. The bandwidth test times out after 15 seconds. At that point it will try to determine the bandwidth based on data that it has already collected.