简体   繁体   English

计算AJAX下载速度

[英]Calculate AJAX download speed

I would like to display the download speed in real time as a file is downloaded, however the following code is not working. 我想在下载文件时实时显示下载速度,但是以下代码不起作用。 Speed returns 0.0 for the entire download. 整个下载Speed返回0.0。

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');
    });
});

I think there is maybe a better solution, but here we go: 我认为可能有更好的解决方案,但是我们开始:

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

    //...
});

Edit: 编辑:

Consider using Date.now() instead of (new Date()).getTime(); 考虑使用Date.now()代替(new Date()).getTime(); for better performance 以获得更好的性能

Thought the answer provided by Carlos is great using Performance.now() instead of (new Date()).getTime() would be a better choice. 认为Carlos提供的答案是使用Performance.now()代替(new Date())。getTime()是一个更好的选择。

For reference: https://developer.mozilla.org/en-US/docs/Web/API/Performance/now 供参考: https : //developer.mozilla.org/en-US/docs/Web/API/Performance/now

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM