2021-09-21 18:42:31 +03:00
// var startTime;
// var endTime;
2021-09-13 23:03:19 +02:00
var testConnectionSpeed = {
imageAddr : 'https://upload.wikimedia.org/wikipedia/commons/a/a6/Brandenburger_Tor_abends.jpg' , // this is just an example, you rather want an image hosted on your server
downloadSize : 2707459 , // this must match with the image above
getConnectionSpeed : function ( callback ) {
testConnectionSpeed . InitiateSpeedDetection ( ) ;
testConnectionSpeed . callback = callback ;
} ,
InitiateSpeedDetection : function ( ) {
window . setTimeout ( testConnectionSpeed . MeasureConnectionSpeed , 1 ) ;
} ,
2021-09-21 18:42:31 +03:00
2021-09-13 23:03:19 +02:00
result : function ( ) {
var duration = ( endTime - startTime ) / 1000 ;
var bitsLoaded = testConnectionSpeed . downloadSize * 8 ;
var speedBps = ( bitsLoaded / duration ) . toFixed ( 2 ) ;
var speedKbps = ( speedBps / 1024 ) . toFixed ( 2 ) ;
var speedMbps = ( speedKbps / 1024 ) . toFixed ( 2 ) ;
testConnectionSpeed . callback ( speedMbps ) ;
} ,
2021-09-21 18:42:31 +03:00
2021-09-13 23:03:19 +02:00
MeasureConnectionSpeed : function ( ) {
var download = new Image ( ) ;
download . onload = function ( ) {
endTime = ( new Date ( ) ) . getTime ( ) ;
testConnectionSpeed . result ( ) ;
} ;
startTime = ( new Date ( ) ) . getTime ( ) ;
var cacheBuster = '?nnn=' + startTime ;
download . src = testConnectionSpeed . imageAddr + cacheBuster ;
} ,
} ;
2021-09-21 18:42:31 +03:00
function timeout ( ms ) {
return new Promise ( resolve => setTimeout ( resolve , ms ) ) ;
}
const imageAddr = 'https://upload.wikimedia.org/wikipedia/commons/a/a6/Brandenburger_Tor_abends.jpg' ;
const downloadSize = 2707459 ; // this must match with the image above
let startTime , endTime ;
function measureConnectionSpeed ( ) {
startTime = ( new Date ( ) ) . getTime ( ) ;
var cacheBuster = '?nnn=' + startTime ;
var download = new Image ( ) ;
download . src = imageAddr + cacheBuster ;
download . onload = function ( ) {
endTime = ( new Date ( ) ) . getTime ( ) ;
var duration = ( endTime - startTime ) / 1000 ;
var bitsLoaded = downloadSize * 8 ;
var speedBps = ( bitsLoaded / duration ) . toFixed ( 2 ) ;
var speedKbps = ( speedBps / 1024 ) . toFixed ( 2 ) ;
var speedMbps = ( speedKbps / 1024 ) . toFixed ( 2 ) ;
console . log ( speedMbps ) ;
return new Promise ( resolve => resolve ( speedMbps ) ) ;
// return speedMbps;
} ;
}
async function getDownloadSpeed ( ) {
await timeout ( 1 ) ;
const downloadSpeed = await measureConnectionSpeed ( ) ;
console . log ( downloadSpeed ) ;
}
2021-09-13 23:03:19 +02:00
// start test immediatly, you could also call this on any event or whenever you want
// testConnectionSpeed.getConnectionSpeed(function(time) { console.log(time) });
module . exports = testConnectionSpeed . getConnectionSpeed ;