Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Determine client's connection speed with JavaScript
// Let's initialize the primitives
var startTime, endTime, fileSize;
// Set up the AJAX to perform
var xhr = new XMLHttpRequest();
// Rig the call-back... THE important part
xhr.onreadystatechange = function () {
// we only need to know when the request has completed
if (xhr.readyState === 4 && xhr.status === 200) {
// Here we stop the timer & register end time
endTime = (new Date()).getTime();
// Also, calculate the file-size which has transferred
fileSize = xhr.responseText.length;
// N.B: fileSize reports number of Bytes
// Calculate the connection-speed
var speed = fileSize / ((endTime - startTime)/1000) / 1024;
// Use (fileSize * 8) instead of fileSize for kbps instead of kBps
// Report the result, or have fries with it...
console.log(speed + " kBps\n");
}
}
// Snap back; here's where we start the timer
startTime = (new Date()).getTime();
// All set, let's hit it!
xhr.open("GET", "URL/TO/PROBE.FILE", true);
xhr.send();
@YashKharel19

This comment has been minimized.

Copy link

YashKharel19 commented May 3, 2018

what does xhr.open("GET", "URL/TO/PROBE.FILE", true); do ? what is URL/TO/PROBE.FILE

@npgenx

This comment has been minimized.

Copy link

npgenx commented May 11, 2018

@YashKharel19 <URL/TO/PROBE.FILE> you replace that with file on your server e.g. http://mydomain.tld/foo.img. This script basically check how long the file took to download to the client's browser

@Sinstrite

This comment has been minimized.

Copy link

Sinstrite commented Feb 16, 2019

What are you calculating the connection speed in, Kibibits, Kilobits, etc?

A bit confused by the formula.

@debloper

This comment has been minimized.

Copy link
Owner Author

debloper commented Jun 2, 2019

What are you calculating the connection speed in, Kibibits, Kilobits, etc?

A bit confused by the formula.

Check line #23

@ffilopeter

This comment has been minimized.

Copy link

ffilopeter commented Aug 24, 2019

What are you calculating the connection speed in, Kibibits, Kilobits, etc?
A bit confused by the formula.

Check line #23

Your units are wrong. KBps is kilobytes per second, but it should be kbps - kilobits per second
fileSize is in Bytes, because length property is number of characters, where each character is 8 bits long = 1 Byte
your formula is:
speed = (fileSize * 8) / ((endTime - startTime)/1000) / 1024
speed = (size in bits) / (time in seconds) / 1024
so it's kilobits/s = kbps, not kilobytes/s = kBps

@debloper

This comment has been minimized.

Copy link
Owner Author

debloper commented Oct 3, 2019

@ffilopeter you're correct. I've just updated it. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.