Ver Fonte

Now using JSON for handling settings; Minor changes

dosse91 há 9 anos atrás
pai
commit
c4dd6d89b8
6 ficheiros alterados com 35 adições e 41 exclusões
  1. 4 4
      README.md
  2. 1 1
      example1.html
  3. 1 4
      example2.html
  4. 1 5
      example3.html
  5. 1 1
      example4.html
  6. 27 26
      speedtest_worker.js

+ 4 - 4
README.md

@@ -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

+ 1 - 1
example1.html

@@ -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>

+ 1 - 4
example2.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>

+ 1 - 5
example3.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(){

+ 1 - 1
example4.html

@@ -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");

+ 27 - 26
speedtest_worker.js

@@ -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();