Last active
November 5, 2023 19:15
-
-
Save debloper/7296289 to your computer and use it in GitHub Desktop.
Determine client's connection speed with JavaScript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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(); |
@ffilopeter you're correct. I've just updated it. Thanks!
Thanks for the gist. Just a quick heads up: seems like there still is some mix up with the units on lines 22 and 25. Unless I am wrong, it should read like this.
`
// Use (fileSize * 8) instead of fileSize for kbps instead of kBps
// Report the result, or have fries with it...
console.log(speed + " kbps\n");
`
@celsobessa I must have had a brain-fart the last time I tried to "fix" it.
Thanks for pointing it out. How does it look now?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@ffilopeter you're correct. I've just updated it. Thanks!