Now using JSON for handling settings; Minor changes
This commit is contained in:
parent
7051405fdc
commit
c4dd6d89b8
6 changed files with 35 additions and 41 deletions
|
@ -2,23 +2,23 @@
|
|||
|
||||
No Flash, No Java, No Websocket, No Bullshit.
|
||||
|
||||
This is a very small (4k) Speedtest implemented in Javascript, using XMLHttpRequest and Web Workers.
|
||||
This is a very small Speedtest implemented in Javascript, using XMLHttpRequest and Web Workers.
|
||||
|
||||
## Try it
|
||||
[Take a Speedtest](http://speedtest.adolfintel.com)
|
||||
|
||||
## Compatibility
|
||||
Only modern browsers are supported (Edge 12+)
|
||||
Microsoft Edge, Firefox 10+, Chrome 10+, Opera 15+, Safari 7 (not tested)
|
||||
|
||||
## Requirements
|
||||
- A reasonably fast web server
|
||||
- A reasonably fast web serve
|
||||
- Some way to generate garbage data using either the included PHP script, a [big file of random data](http://downloads.adolfintel.com/geth.php?r=speedtest-bigfile), or a symlink to /dev/urandom
|
||||
- Your server must not compress the data it sends
|
||||
- Your server must accept large POST requests (up to 10 Megabytes), otherwise the upload test will fail
|
||||
- Client side, there must not be any type of buffering (such as a proxy), or you may get incorrect results
|
||||
|
||||
## How to use
|
||||
See the examples, it's really simple.
|
||||
See example.html, it's not rocket science.
|
||||
|
||||
## License
|
||||
Copyright (C) 2016 Federico Dossena
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
document.getElementById("upload").innerHTML=data[2]+" Mbit/s";
|
||||
document.getElementById("ping").innerHTML=data[3]+" ms";
|
||||
}
|
||||
w.postMessage("start"); //start the speedtest (default params: garbage.php empty.dat empty.dat)
|
||||
w.postMessage("start"); //start the speedtest (default params. keep garbage.php and empty.dat in the same directory as the js file)
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -64,10 +64,7 @@
|
|||
ul.innerHTML=data[2];
|
||||
ping.innerHTML=data[3];
|
||||
}.bind(this);
|
||||
w.postMessage("set url_dl garbage.php");
|
||||
w.postMessage("set url_ul empty.dat");
|
||||
w.postMessage("set url_ping empty.dat");
|
||||
w.postMessage("start");
|
||||
w.postMessage('start {"url_dl":"garbage.php","url_ul":"empty.dat","url_ping":"empty.dat","time_dl":"10","time_ul":"15","count_ping":"30"}'); //start with custom parameters. paths are relative to js file. you can omit parameters that you don't want to change
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -50,8 +50,7 @@
|
|||
var data=event.data.split(";");
|
||||
var status=Number(data[0]);
|
||||
var dl=document.getElementById("download"),ul=document.getElementById("upload"),ping=document.getElementById("ping");
|
||||
// dl.className=status==1?"flash":"";ul.className=status==2?"flash":"";ping.className=status==3?"flash":"";
|
||||
|
||||
dl.className=status==1?"flash":"";ul.className=status==2?"flash":"";ping.className=status==3?"flash":"";
|
||||
if(status>=4){
|
||||
clearInterval(interval);
|
||||
document.getElementById("abortBtn").style.display="none";
|
||||
|
@ -65,9 +64,6 @@
|
|||
ul.innerHTML=data[2];
|
||||
ping.innerHTML=data[3];
|
||||
}.bind(this);
|
||||
w.postMessage("set time_dl 10"); // Timeout download
|
||||
w.postMessage("set time_ul 20"); // Timeout upload
|
||||
w.postMessage("set count_ping 30"); // Count of pings
|
||||
w.postMessage("start");
|
||||
}
|
||||
function abortTest(){
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
updateGauge(ggul, data[2]);
|
||||
updateGauge(ggping, data[3]);
|
||||
}.bind(this);
|
||||
w.postMessage("start");
|
||||
w.postMessage('start {"time_ul":"5", "time_dl":"5", "count_ping":"10", "url_dl":"garbage.php","url_ul":"empty.dat","url_ping":"empty.dat"}');
|
||||
}
|
||||
function abortTest(){
|
||||
if(w)w.postMessage("abort");
|
||||
|
|
|
@ -1,29 +1,30 @@
|
|||
var testStatus=0,dlStatus="",ulStatus="",pingStatus="";
|
||||
var settings={time_ul : 15, time_dl:15, count_ping: 15, url_dl:"garbage.php",url_ul:"empty.dat",url_ping:"empty.dat"};
|
||||
var settings={time_ul:15, time_dl:15, count_ping:35, url_dl:"garbage.php",url_ul:"empty.dat",url_ping:"empty.dat"};
|
||||
var xhr=null;
|
||||
this.addEventListener('message', function(e){
|
||||
var params=e.data.split(" ");
|
||||
if(params[0]=="set")
|
||||
{
|
||||
if(params[1] && settings.hasOwnProperty(params[1]) && params[2])
|
||||
{
|
||||
settings[params[1]]=params[2];
|
||||
}
|
||||
}
|
||||
if(params[0]=="status"){
|
||||
postMessage(testStatus+";"+dlStatus+";"+ulStatus+";"+pingStatus);
|
||||
}
|
||||
if(params[0]=="start"){
|
||||
if(testStatus==0){
|
||||
testStatus=1;
|
||||
dlTest(function(){testStatus=2;ulTest(function(){testStatus=3;pingTest(function(){testStatus=4;});});});
|
||||
}
|
||||
}
|
||||
if(params[0]=="abort"){
|
||||
console.warn("Aborting test...")
|
||||
try{if(xhr)xhr.abort();}catch(e){}
|
||||
testStatus=5;dlStatus="";ulStatus="";pingStatus="";
|
||||
}
|
||||
var params=e.data.split(" ");
|
||||
if(params[0]=="status"){
|
||||
postMessage(testStatus+";"+dlStatus+";"+ulStatus+";"+pingStatus);
|
||||
}
|
||||
if(params[0]=="start"){
|
||||
if(testStatus==0){
|
||||
testStatus=1;
|
||||
try{
|
||||
var s=JSON.parse(e.data.substring(5));
|
||||
if(typeof s.url_dl != "undefined") settings.url_dl=s.url_dl;
|
||||
if(typeof s.url_ul != "undefined") settings.url_ul=s.url_ul;
|
||||
if(typeof s.url_ping != "undefined") settings.url_ping=s.url_ping;
|
||||
if(typeof s.time_dl != "undefined") settings.time_dl=s.time_dl;
|
||||
if(typeof s.time_ul != "undefined") settings.time_ul=s.time_ul;
|
||||
if(typeof s.count_ping != "undefined") settings.count_ping=s.count_ping;
|
||||
}catch(e){}
|
||||
dlTest(function(){testStatus=2;ulTest(function(){testStatus=3;pingTest(function(){testStatus=4;});});});
|
||||
}
|
||||
}
|
||||
if(params[0]=="abort"){
|
||||
try{if(xhr)xhr.abort();}catch(e){}
|
||||
testStatus=5;dlStatus="";ulStatus="";pingStatus="";
|
||||
}
|
||||
});
|
||||
|
||||
function dlTest(done){
|
||||
|
@ -41,7 +42,7 @@ function dlTest(done){
|
|||
prevLoaded=event.loaded;
|
||||
prevT=new Date().getTime();
|
||||
dlStatus=((speed*8)/1048576.0).toFixed(2);
|
||||
if(((prevT-startT)/1000.0)>settings.time_dl){;try{xhr.abort();}catch(e){} xhr=null; done();}
|
||||
if(((prevT-startT)/1000.0)>settings.time_dl){try{xhr.abort();}catch(e){} xhr=null; done();}
|
||||
}.bind(this);
|
||||
xhr.onload=function(){
|
||||
dlStatus=((speed*8)/1048576.0).toFixed(2);
|
||||
|
@ -95,7 +96,7 @@ function pingTest(done){
|
|||
prevT=new Date().getTime();
|
||||
}else{
|
||||
var instspd=new Date().getTime()-prevT;
|
||||
if(i==1) ping=instspd; else ping=ping*0.9+instspd*0.1;
|
||||
if(i==1)ping=instspd; else ping=ping*0.9+instspd*0.1;
|
||||
}
|
||||
pingStatus=ping.toFixed(2);
|
||||
i++;
|
||||
|
@ -105,7 +106,7 @@ function pingTest(done){
|
|||
pingStatus="Fail";
|
||||
done();
|
||||
}.bind(this);
|
||||
xhr.open("GET", settings.url_ping+"?r="+Math.random(),true);
|
||||
xhr.open("GET",settings.url_ping+"?r="+Math.random(),true);
|
||||
xhr.send();
|
||||
}.bind(this);
|
||||
doPing();
|
||||
|
|
Loading…
Reference in a new issue