Merged with master

This commit is contained in:
dosse91 2019-09-24 09:40:14 +02:00
commit 4f8dc3d23f
3 changed files with 50 additions and 44 deletions

View file

@ -1,11 +1,10 @@
# HTML5 Speedtest # HTML5 Speedtest
This is a s nodeJS Port from [adolfintel's HTML5 Speedtest](https://github.com/adolfintel/speedtest) This is a nodeJS Port from [adolfintel's HTML5 Speedtest](https://github.com/adolfintel/speedtest)
## Installation ## Installation
For any instructions and support please check out the [Wiki](https://github.com/adolfintel/speedtest/wiki) For any instructions and support please check out the [Wiki](https://github.com/adolfintel/speedtest/wiki)
## Support ## Support
If you like this project and want to support our work you can either do pull requests or donate via [PayPal](https://paypal.me/dunklesToast) If you like this project and want to support our work you can either do pull requests or donate via [PayPal](https://paypal.me/dunklesToast)

View file

@ -12,9 +12,7 @@ var s=new Speedtest(); //create speedtest object
var meterBk=/Trident.*rv:(\d+\.\d+)/i.test(navigator.userAgent)?"#EAEAEA":"#80808040"; var meterBk=/Trident.*rv:(\d+\.\d+)/i.test(navigator.userAgent)?"#EAEAEA":"#80808040";
var dlColor="#6060AA", var dlColor="#6060AA",
ulColor="#309030", ulColor="#309030";
pingColor="#AA6060",
jitColor="#AA6060";
var progColor=meterBk; var progColor=meterBk;
//CODE FOR GAUGES //CODE FOR GAUGES
@ -47,8 +45,11 @@ function drawMeter(c,amount,bk,fg,progress,prog){
function mbpsToAmount(s){ function mbpsToAmount(s){
return 1-(1/(Math.pow(1.3,Math.sqrt(s)))); return 1-(1/(Math.pow(1.3,Math.sqrt(s))));
} }
function msToAmount(s){ function format(d){
return 1-(1/(Math.pow(1.08,Math.sqrt(s)))); d=Number(d);
if(d<10) return d.toFixed(2);
if(d<100) return d.toFixed(1);
return d.toFixed(0);
} }
//UI CODE //UI CODE
@ -79,14 +80,12 @@ function updateUI(forced){
if(uiData==null) return; if(uiData==null) return;
var status=uiData.testState; var status=uiData.testState;
I("ip").textContent=uiData.clientIp; I("ip").textContent=uiData.clientIp;
I("dlText").textContent=(status==1&&uiData.dlStatus==0)?"...":uiData.dlStatus; I("dlText").textContent=(status==1&&uiData.dlStatus==0)?"...":format(uiData.dlStatus);
drawMeter(I("dlMeter"),mbpsToAmount(Number(uiData.dlStatus*(status==1?oscillate():1))),meterBk,dlColor,Number(uiData.dlProgress),progColor); drawMeter(I("dlMeter"),mbpsToAmount(Number(uiData.dlStatus*(status==1?oscillate():1))),meterBk,dlColor,Number(uiData.dlProgress),progColor);
I("ulText").textContent=(status==3&&uiData.ulStatus==0)?"...":uiData.ulStatus; I("ulText").textContent=(status==3&&uiData.ulStatus==0)?"...":format(uiData.ulStatus);
drawMeter(I("ulMeter"),mbpsToAmount(Number(uiData.ulStatus*(status==3?oscillate():1))),meterBk,ulColor,Number(uiData.ulProgress),progColor); drawMeter(I("ulMeter"),mbpsToAmount(Number(uiData.ulStatus*(status==3?oscillate():1))),meterBk,ulColor,Number(uiData.ulProgress),progColor);
I("pingText").textContent=uiData.pingStatus; I("pingText").textContent=format(uiData.pingStatus);
drawMeter(I("pingMeter"),msToAmount(Number(uiData.pingStatus*(status==2?oscillate():1))),meterBk,pingColor,Number(uiData.pingProgress),progColor); I("jitText").textContent=format(uiData.jitterStatus);
I("jitText").textContent=uiData.jitterStatus;
drawMeter(I("jitMeter"),msToAmount(Number(uiData.jitterStatus*(status==2?oscillate():1))),meterBk,jitColor,Number(uiData.pingProgress),progColor);
} }
function oscillate(){ function oscillate(){
return 1+0.02*Math.sin(Date.now()/100); return 1+0.02*Math.sin(Date.now()/100);
@ -102,8 +101,6 @@ frame(); //start frame loop
function initUI(){ function initUI(){
drawMeter(I("dlMeter"),0,meterBk,dlColor,0); drawMeter(I("dlMeter"),0,meterBk,dlColor,0);
drawMeter(I("ulMeter"),0,meterBk,ulColor,0); drawMeter(I("ulMeter"),0,meterBk,ulColor,0);
drawMeter(I("pingMeter"),0,meterBk,pingColor,0);
drawMeter(I("jitMeter"),0,meterBk,jitColor,0);
I("dlText").textContent=""; I("dlText").textContent="";
I("ulText").textContent=""; I("ulText").textContent="";
I("pingText").textContent=""; I("pingText").textContent="";
@ -163,50 +160,62 @@ function initUI(){
position:relative; position:relative;
box-sizing:border-box; box-sizing:border-box;
} }
div.testName{ div.testArea2{
display:inline-block;
width:14em;
height:7em;
position:relative;
box-sizing:border-box;
text-align:center;
}
div.testArea div.testName{
position:absolute; position:absolute;
top:0.1em; left:0; top:0.1em; left:0;
width:100%; width:100%;
font-size:1.4em; font-size:1.4em;
z-index:9; z-index:9;
} }
div.meterText{ div.testArea2 div.testName{
display:block;
text-align:center;
font-size:1.4em;
}
div.testArea div.meterText{
position:absolute; position:absolute;
bottom:1.55em; left:0; bottom:1.55em; left:0;
width:100%; width:100%;
font-size:2.5em; font-size:2.5em;
z-index:9; z-index:9;
} }
div.testArea2 div.meterText{
display:inline-block;
font-size:2.5em;
}
div.meterText:empty:before{ div.meterText:empty:before{
content:"0.00"; content:"0.00";
} }
div.unit{ div.testArea div.unit{
position:absolute; position:absolute;
bottom:2em; left:0; bottom:2em; left:0;
width:100%; width:100%;
z-index:9; z-index:9;
} }
div.testArea2 div.unit{
display:inline-block;
}
div.testArea canvas{ div.testArea canvas{
position:absolute; position:absolute;
top:0; left:0; width:100%; height:100%; top:0; left:0; width:100%; height:100%;
z-index:1; z-index:1;
} }
div.testGroup{ div.testGroup{
display:inline-block; display:block;
} margin: 0 auto;
@media all and (max-width:65em){
body{
font-size:1.5vw;
}
} }
@media all and (max-width:40em){ @media all and (max-width:40em){
body{ body{
font-size:0.8em; font-size:0.8em;
} }
div.testGroup{
display:block;
margin: 0 auto;
}
} }
</style> </style>
<title>HTML5 Speedtest</title> <title>HTML5 Speedtest</title>
@ -216,6 +225,18 @@ function initUI(){
<div id="testWrapper"> <div id="testWrapper">
<div id="startStopBtn" onclick="startStop()"></div> <div id="startStopBtn" onclick="startStop()"></div>
<div id="test"> <div id="test">
<div class="testGroup">
<div class="testArea2">
<div class="testName">Ping</div>
<div id="pingText" class="meterText"></div>
<div class="unit">ms</div>
</div>
<div class="testArea2">
<div class="testName">Jitter</div>
<div id="jitText" class="meterText"></div>
<div class="unit">ms</div>
</div>
</div>
<div class="testGroup"> <div class="testGroup">
<div class="testArea"> <div class="testArea">
<div class="testName">Download</div> <div class="testName">Download</div>
@ -230,22 +251,8 @@ function initUI(){
<div class="unit">Mbps</div> <div class="unit">Mbps</div>
</div> </div>
</div> </div>
<div class="testGroup">
<div class="testArea">
<div class="testName">Ping</div>
<canvas id="pingMeter" class="meter"></canvas>
<div id="pingText" class="meterText"></div>
<div class="unit">ms</div>
</div>
<div class="testArea">
<div class="testName">Jitter</div>
<canvas id="jitMeter" class="meter"></canvas>
<div id="jitText" class="meterText"></div>
<div class="unit">ms</div>
</div>
</div>
<div id="ipArea"> <div id="ipArea">
IP Address: <span id="ip"></span> <span id="ip"></span>
</div> </div>
</div> </div>
<a href="https://github.com/adolfintel/speedtest">Source code</a> <a href="https://github.com/adolfintel/speedtest">Source code</a>

View file

@ -631,7 +631,7 @@ function pingTest(done) {
var instjitter = Math.abs(instspd - prevInstspd); var instjitter = Math.abs(instspd - prevInstspd);
if (i === 1) ping = instspd; if (i === 1) ping = instspd;
/* first ping, can't tell jitter yet*/ else { /* first ping, can't tell jitter yet*/ else {
ping = instspd < ping ? instspd : ping * 0.8 + instspd * 0.2; // update ping, weighted average. if the instant ping is lower than the current average, it is set to that value instead of averaging if (instspd < ping) ping = instspd; // update ping, if the instant ping is lower
if (i === 2) jitter = instjitter; if (i === 2) jitter = instjitter;
//discard the first jitter measurement because it might be much higher than it should be //discard the first jitter measurement because it might be much higher than it should be
else jitter = instjitter > jitter ? jitter * 0.3 + instjitter * 0.7 : jitter * 0.8 + instjitter * 0.2; // update jitter, weighted average. spikes in ping values are given more weight. else jitter = instjitter > jitter ? jitter * 0.3 + instjitter * 0.7 : jitter * 0.8 + instjitter * 0.2; // update jitter, weighted average. spikes in ping values are given more weight.