2016-10-28 37 views
0

我發現了一個很好的例子,她的stackoverflow如何檢測互聯網與JavaScript的速度。但是當我運行代碼時,它顯示1.14 Mbps,但在實際速度測試服務中,我的速度超過了80 Mbps。有人會告訴我爲什麼,我該如何改進?在Javascript中檢測互聯網速度?

var imageAddr = "http://www.w3schools.com/css/trolltunga.jpg"; 
var downloadSize = 45941; //bytes 

function ShowProgressMessage(msg) { 
    if (console) { 
     if (typeof msg == "string") { 
      console.log(msg); 
     } else { 
      for (var i = 0; i < msg.length; i++) { 
       console.log(msg[i]); 
      } 
     } 
    } 

    var oProgress = document.getElementById("progress"); 
    if (oProgress) { 
     var actualHTML = (typeof msg == "string") ? msg : msg.join("<br />"); 
     oProgress.innerHTML = actualHTML; 
    } 
} 

function InitiateSpeedDetection() { 
    ShowProgressMessage("Testing your internet connection quality..."); 
    window.setTimeout(MeasureConnectionSpeed, 1); 
};  

if (window.addEventListener) { 
    window.addEventListener('load', InitiateSpeedDetection, false); 
} else if (window.attachEvent) { 
    window.attachEvent('onload', InitiateSpeedDetection); 
} 

function MeasureConnectionSpeed() { 
    var startTime, endTime; 
    var download = new Image(); 
    download.onload = function() { 
     endTime = (new Date()).getTime(); 
     showResults(); 
    } 

    download.onerror = function (err, msg) { 
     ShowProgressMessage("Invalid image, or error downloading"); 
    } 

    startTime = (new Date()).getTime(); 
    var cacheBuster = "?nnn=" + startTime; 
    download.src = imageAddr + cacheBuster; 

    function showResults() { 
     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); 
     ShowProgressMessage([ 
      "Your connection speed is:", 
      speedBps + " bps", 
      speedKbps + " kbps", 
      speedMbps + " Mbps" 
     ]); 
    } 
} 
+0

那麼,也許另一端的服務器只推到1.14Mbps? – pawel

+0

也許w3schools服務器服務圖像有點慢? – Bergi

+0

我覺得很難相信,當你輸入這個問題的標題時,上面沒有出現? [我如何問一個好問題?](http://stackoverflow.com/help/how-to-ask)*「搜索和研究」* – Liam

回答

0

我認爲這是一個問題,如何在網上傳輸包的行爲。

我不能100%解釋它,但傳輸以儘可能低的速度開始並在傳輸過程中儘可能增加。 所以當你測量時你永遠不會獲得最大的速度。 當你下載一個更大的文件(嘗試5MB)時,你可以達到最快的速度,你會得到更精確的結果。