2011-01-03 14 views
11

以下のコードでは、画像のダウンロード速度を計算しようとしていますが、速度は無限大になります。私は間違って何をしていますか?JavaScriptを使用して速度を計算する

var imageAddr = "/images/image.jpg" + "?n=" + Math.random(); 
var startTime, endTime; 
var downloadSize = 200000; 
var download = new Image(); 
download.onload = function() { 
    endTime = (new Date()).getTime(); 
    showResults(); 
} 
startTime = (new Date()).getTime(); 
download.src = imageAddr; 

function showResults() { 
    var duration = Math.round((endTime - startTime)/1000); 
    var bitsLoaded = downloadSize * 8; 
    var speedBps = Math.round(bitsLoaded/duration); 
    var speedKbps = (speedBps/1024).toFixed(2); 
    var speedMbps = (speedKbps/1024).toFixed(2); 
    alert("Your connection speed is: \n" + 
      speedBps + " bps\n" + 
      speedKbps + " kbps\n" + 
      speedMbps + " Mbps\n"); 
} 
+0

これは、関連性のないタグを削除した純粋なJavaScriptです。 –

+1

スピードテストapiを使用することもできます。http://speedof.me/api.html – advncd

+0

このJavaScriptコードを正常に使用したことがある方は、最初に「download.onload」への呼び出しはありませんでしたか?これはまさに私が経験していることであり、私はまだそれを見つけようとしています。 –

答えて

7

durationおそらく0を出て、ゼロで割った正の数は、JavaScriptで正の無限大の特別な値が得られています。

+0

それは私が推測したものですが、最終値はspeedBps、speedKbps、speedMbpsはすべて無限大で、これらは期間で除算されません。 – Rajeev

+3

'speedBps'は' var speedBps = Math.round(bitsLoaded/duration); 'のように計算されます。 'duration'が0の場合、' speedBps'は無限大になります。また、他の2つの速度変数は 'speedBps'から計算されるため、無限大になります。 – cdhowie

6

期間を四捨五入しないでください。

var duration = (endTime - startTime)/1000; 
+0

ダウンロード速度が13793103 bps、13469.83 kbps13.15 Mbpsです。私のインターネット接続が3 Mbpsに制限されているため、これは間違っています.1.3 Mbpsにする必要があります – Rajeev

+0

まず、画像がgzipで送信されていないこと、それはそれを少し速くする(それほど多くはないが不正確になるから)。次に、適切な 'downloadSize'番号を持っていることを確認する必要があります。最後に、イメージファイルが 'localhost'にないことを確認してください。 – Thai

+0

ダウンロードサイズについてはどうですか? – Rajeev

7

はちょうどそれについて考える:endTimestartTime[ms]であるので、その差はミリ秒でもあります。スニペットのうち

Math.round((endTime - startTime)/1000); 
-> Math.round(300/1000); 
-> Math.round(0.3); 
-> 0 

脱退Math.round300ミリ用の画像読み込みと

例。

は、そして他の人としてduration = 0

speedBps = bitsLoaded/duration 
-> speedBps = bitsLoaded/0 
-> speedBps = Infinity 

しかしにつながる述べ、あなたがこのような正確な結果を得ることができないことに注意してください。あなたの例ではcannot be measuredの待ち時間、接続時間、最初のバイトまでの時間などがあり、画像の場合は< 1 MBとなり、結果が非​​常に不正確になります。

+0

アップロード/ダウンロードの制限を調べる方法 – Rajeev

+1

このメソッドといくつかの同様のテクニックをテストして、数字から意味のある結果を得ることはほとんど役に立たなかった。私のテストでは、小さな中規模ファイルと大容量ファイルは、ダウンロード速度が大きく異なっていました。 1つは類似の率を期待する - そう私は速度が速度についての結論に達するべき正確な測定ではないと思う..... – alQemist

3

あなたの期間が0に近いため、 あなたは

するvar期間=(endTimeは - のstartTime)試してみてください/ 1000;

関連する問題