2014-01-09 137 views
4

使用此代碼我能計算我的下載速度:計算上傳速度

var imgAddr = "http://upload.wikimedia.org/wikipedia/commons/2/2d/Snake_River_%285mb%29.jpg" + "?n=" + Math.random(); 
var startTime, endTime; 
var download_size = 5*1024*1024; 
var img = new Image(); 
img.onload = function() { 
    endTime = (new Date()).getTime(); 
    ShowData(); 
} 
startTime = (new Date()).getTime(); 
img.src = imgAddr; 

function ShowData() 
{ 
    var duration = (endTime - startTime)/1000; 
    var bitsLoaded = download_size * 8; 
    var speedMbps = ((bitsLoaded/duration)/1024/1024).toFixed(2); 
    alert("Speed: " + speedMbps + " Mbps"); 
} 

jsfiddle

我怎麼會發送相同的圖像恢復到虛擬的PHP(不知道這將是需要存在一個服務器端腳本來「接受」POST請求)在我的服務器來計算上傳速度

+0

你想用圖像做什麼?你爲什麼要編寫腳本來計算下載速度? – imbask

+0

爲什麼?...因爲我想向用戶展示他的帶寬速度。我可以以一定的準確度顯示下載速度,現在我想獲得上傳速度。 – Cornwell

+2

它似乎更容易,如果你只是送他到速度測試網站 – Huangism

回答

4

如果你想測試上傳速度,我不明白你爲什麼要發送這個具體的形象。

我寧願發送原始數據。

下面是一個例子:

var http = new XMLHttpRequest(); 
var startTime, endTime; 
var url = "script_that_whill_handle_post.php"; 
var myData = "d="; // the raw data you will send 
for(var i = 0 ; i < 1022 ; i++) //if you want to send 1 kb (2 + 1022 bytes = 1024b = 1kb). change it the way you want 
{ 
    myData += "k"; // add one byte of data; 
} 

http.open("POST", url, true); 

http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
http.setRequestHeader("Content-length", myData .length); 
http.setRequestHeader("Connection", "close"); 

http.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) { 
     endTime = (new Date()).getTime(); 
     ShowData(); 
    } 
} 
startTime = (new Date()).getTime(); 
http.send(myData); 

(使用相同的showData功能)

您還可以發送圖像,而不是字母「K」多次,但它需要更多的數據代碼,我不會看到這樣做的任何改進。

希望它有幫助

+0

我最終實際上做了。不幸的是,結果是從瀏覽器到瀏覽器的不同。特別是在IE中。 – Cornwell

+0

考慮增加發送字節的長度。它應該減少差異 –

+0

如何在交通工具中壓縮數據? – Alex