2016-06-16 12 views
1

ファイルをダウンロードする際にリアルタイムでダウンロード速度を表示したいのですが、次のコードは機能しません。 Speedはダウンロード全体で0.0を返します。AJAXのダウンロード速度を計算する

https.get(options, function (update) { 
    fileSize = (parseInt(update.headers['content-length'])/1048576).toFixed(1); 
    startTime = (new Date()).getTime(); 
    endTime = startTime; 
    update.on('data', function (chunk) { 
     file.write(chunk); 
     len += chunk.length; 
     fileDownloaded = (len/1048576).toFixed(1); 
     endTime = (new Date()).getTime(); 
     time = (endTime - startTime)/1000; 
     speed = ((fileSize/time)/(1024 * 1024)).toFixed(2); 
     progressPercentage.html(fileDownloaded + ' MB/' + fileSize + ' MB ' + speed + ' MB/s'); 
    }); 
}); 
+0

変数のいくつかのより多くをyou IF出力、おそらく犯人を識別することができます。問題はどこから始まるのですか? – 4castle

+0

@ User394839859 - これは 'update.headers ['content-length']'が評価されるようないくつかの基本を知らなくても遠隔でデバッグするのは難しいです。しかし、@CarlosCarucceは彼の答えに良い点を作っている。この適切なJSを(「var」などで変数を宣言して)作成し、クロージャ内の変数の範囲を確認するには、少なくともいくつかの手順を実行する必要があります。 – hightempo

答えて

2

私は多分よりよい解決策があると思いますが、ここで私達は行く:

var startTime = (new Date()).getTime(); 
var downloadedLength = 0; 

update.on('data', function (chunk) { 
    // ... 

    downloadedLength += chunk.length; 

    var now = (new Date()).getTime(); 
    var speed = downloadedLength/(now - startTime); //bytes/second 
    //speed/1024 should return in kilobytes 

    //... 
}); 

編集:

+0

ありがとう、これは動作します - 簡単! –

0

が答えを考えたパ​​フォーマンス向上のための代わり(new Date()).getTime();Date.now()を使用することを検討してくださいCarlosが提供しているのは、(new Date())の代わりにPerformance.now()を使うことです。getTime()を使うのが良いでしょう。 referenceについては

https://developer.mozilla.org/en-US/docs/Web/API/Performance/now

+0

ありがとうございます、私はそれを更新します – CarlosCarucce

+0

私は 'Date.now()'はそれが良いだろうと思いますか? – CarlosCarucce

関連する問題