example5.html 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Speedtest</title>
  5. <style type="text/css">
  6. html,body{
  7. margin:0;
  8. padding:0;
  9. border:none;
  10. text-align:center;
  11. }
  12. #startBtn{
  13. display:inline-block;
  14. border:0.15em solid #000000;
  15. padding:0.3em 0.5em;
  16. margin:0.6em;
  17. color:#000000;
  18. text-decoration:none;
  19. }
  20. #ip{
  21. margin:0.8em 0;
  22. font-size:1.2em;
  23. }
  24. #chart1Area, #chart2Area{
  25. width:100%;
  26. max-width:30em;
  27. height:10em;
  28. display:block;
  29. margin:0 auto;
  30. }
  31. </style>
  32. <script src="example5_data/Chart.bundle.min.js"></script>
  33. <script type="text/javascript">
  34. var w=null;
  35. function runTest(){
  36. var chart1ctx=document.getElementById("chart1Area").getContext('2d'),
  37. chart2ctx=document.getElementById("chart2Area").getContext('2d');
  38. var dlDataset={
  39. label: "Download",
  40. fill: false,
  41. lineTension: 0.1,
  42. backgroundColor: "rgba(75,192,192,0.4)",
  43. borderColor: "rgba(75,192,192,1)",
  44. borderCapStyle: 'butt',
  45. borderDash: [],
  46. borderDashOffset: 0.0,
  47. borderJoinStyle: 'miter',
  48. pointBorderColor: "rgba(75,192,192,1)",
  49. pointBackgroundColor: "#fff",
  50. pointBorderWidth: 1,
  51. pointHoverRadius: 5,
  52. pointHoverBackgroundColor: "rgba(75,192,192,1)",
  53. pointHoverBorderColor: "rgba(220,220,220,1)",
  54. pointHoverBorderWidth: 2,
  55. pointRadius: 1,
  56. pointHitRadius: 10,
  57. data: [0],
  58. spanGaps: false,
  59. },
  60. ulDataset={
  61. label: "Upload",
  62. fill: false,
  63. lineTension: 0.1,
  64. backgroundColor: "rgba(192,192,75,0.4)",
  65. borderColor: "rgba(192,192,75,1)",
  66. borderCapStyle: 'butt',
  67. borderDash: [],
  68. borderDashOffset: 0.0,
  69. borderJoinStyle: 'miter',
  70. pointBorderColor: "rgba(192,192,75,1)",
  71. pointBackgroundColor: "#fff",
  72. pointBorderWidth: 1,
  73. pointHoverRadius: 5,
  74. pointHoverBackgroundColor: "rgba(192,192,75,1)",
  75. pointHoverBorderColor: "rgba(220,220,220,1)",
  76. pointHoverBorderWidth: 2,
  77. pointRadius: 1,
  78. pointHitRadius: 10,
  79. data: [0],
  80. spanGaps: false,
  81. },
  82. pingDataset={
  83. label: "Ping",
  84. fill: false,
  85. lineTension: 0.1,
  86. backgroundColor: "rgba(75,220,75,0.4)",
  87. borderColor: "rgba(75,220,75,1)",
  88. borderCapStyle: 'butt',
  89. borderDash: [],
  90. borderDashOffset: 0.0,
  91. borderJoinStyle: 'miter',
  92. pointBorderColor: "rgba(75,220,75,1)",
  93. pointBackgroundColor: "#fff",
  94. pointBorderWidth: 1,
  95. pointHoverRadius: 5,
  96. pointHoverBackgroundColor: "rgba(75,220,75,1)",
  97. pointHoverBorderColor: "rgba(220,220,220,1)",
  98. pointHoverBorderWidth: 2,
  99. pointRadius: 1,
  100. pointHitRadius: 10,
  101. data: [],
  102. spanGaps: false,
  103. },
  104. jitterDataset={
  105. label: "Jitter",
  106. fill: false,
  107. lineTension: 0.1,
  108. backgroundColor: "rgba(220,75,75,0.4)",
  109. borderColor: "rgba(220,75,75,1)",
  110. borderCapStyle: 'butt',
  111. borderDash: [],
  112. borderDashOffset: 0.0,
  113. borderJoinStyle: 'miter',
  114. pointBorderColor: "rgba(220,75,75,1)",
  115. pointBackgroundColor: "#fff",
  116. pointBorderWidth: 1,
  117. pointHoverRadius: 5,
  118. pointHoverBackgroundColor: "rgba(220,75,75,1)",
  119. pointHoverBorderColor: "rgba(220,220,220,1)",
  120. pointHoverBorderWidth: 2,
  121. pointRadius: 1,
  122. pointHitRadius: 10,
  123. data: [],
  124. spanGaps: false,
  125. }
  126. ;
  127. var chart1Options={
  128. type: 'line',
  129. data: {
  130. datasets: [dlDataset,ulDataset]
  131. },
  132. options:{
  133. responsive: true,
  134. legend: {
  135. position: 'bottom',
  136. },
  137. scales: {
  138. xAxes: [{
  139. display: true,
  140. scaleLabel: {
  141. display: false,
  142. },
  143. ticks:{
  144. beginAtZero: true
  145. }
  146. }],
  147. yAxes: [{
  148. display: true,
  149. scaleLabel: "Speed",
  150. ticks:{
  151. beginAtZero: true
  152. }
  153. }]
  154. }
  155. }
  156. },
  157. chart2Options={
  158. type: 'line',
  159. data: {
  160. datasets: [pingDataset,jitterDataset]
  161. },
  162. options:{
  163. responsive: true,
  164. legend: {
  165. position: 'bottom',
  166. },
  167. scales: {
  168. xAxes: [{
  169. display: true,
  170. scaleLabel: {
  171. display: false,
  172. },
  173. ticks:{
  174. beginAtZero: true
  175. }
  176. }],
  177. yAxes: [{
  178. display: true,
  179. scaleLabel: "Latency",
  180. ticks:{
  181. beginAtZero: true
  182. }
  183. }]
  184. }
  185. }
  186. };
  187. var chart1 = new Chart(chart1ctx, chart1Options),
  188. chart2 = new Chart(chart2ctx, chart2Options);
  189. document.getElementById("startBtn").style.display="none";
  190. document.getElementById("testArea").style.display="";
  191. document.getElementById("abortBtn").style.display="";
  192. w=new Worker("speedtest_worker.min.js");
  193. var interval=setInterval(function(){w.postMessage("status");}.bind(this),100);
  194. w.onmessage=function(event){
  195. var data=event.data.split(";");
  196. var status=Number(data[0]);
  197. if(status>=4){
  198. clearInterval(interval);
  199. document.getElementById("abortBtn").style.display="none";
  200. document.getElementById("startBtn").style.display="";
  201. w=null;
  202. }
  203. if(status==5){
  204. document.getElementById("testArea").style.display="none";
  205. }
  206. if(status==1&&Number(data[1])>0){
  207. chart1.data.datasets[0].data.push(Number(data[1]));
  208. chart1.data.labels[chart1.data.datasets[0].data.length-1]="";
  209. chart1.update();
  210. }
  211. if(status==3&&Number(data[2])>0){
  212. chart1.data.datasets[1].data.push(Number(data[2]));
  213. chart1.data.labels[chart1.data.datasets[1].data.length-1]="";
  214. chart1.update();
  215. }
  216. if(status==2&&Number(data[3])>0){
  217. chart2.data.datasets[0].data.push(Number(data[3]));
  218. chart2.data.datasets[1].data.push(Number(data[5]));
  219. chart2.data.labels[chart2.data.datasets[0].data.length-1]="";
  220. chart2.data.labels[chart2.data.datasets[1].data.length-1]="";
  221. chart2.update();
  222. }
  223. ip.innerHTML=data[4];
  224. }.bind(this);
  225. w.postMessage("start");
  226. }
  227. function abortTest(){
  228. if(w)w.postMessage("abort");
  229. }
  230. </script>
  231. </head>
  232. <body>
  233. <h1>Speedtest</h1>
  234. <div id="testArea" style="display:none">
  235. <div id="ip">Please wait...</div>
  236. <h2>Speed</h2>
  237. <canvas id="chart1Area"></canvas>
  238. <h2>Latency</h2>
  239. <canvas id="chart2Area"></canvas>
  240. <br/>
  241. <a href="javascript:abortTest()" id="abortBtn">Abort</a>
  242. </div>
  243. <a href="javascript:runTest()" id="startBtn">Run speedtest</a>
  244. <br/><br/>
  245. Charts by <a href="http://www.chartjs.org/">Chart.js</a>
  246. </body>
  247. </html>