javascript - 计算 AJAX 下载速度

标签 javascript node.js

我想在下载文件时实时显示下载速度,但是下面的代码不起作用。 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');
    });
});

最佳答案

我认为可能有更好的解决方案,但我们开始吧:

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

    //...
});

编辑:

考虑使用 Date.now() 而不是 (new Date()).getTime(); 以获得更好的性能

关于javascript - 计算 AJAX 下载速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37865622/

相关文章:

javascript - 如何从自由格式文本中提取日期时间?

javascript - 删除 TinyMCE 文本区域中的前导和尾随空格

node.js - 公共(public) WiFi 热点中使用的 Node JS 互联网网关/强制门户

javascript - 使用 Node Js 进行网页抓取 - <ul> 标签

javascript - 不确定如何在 Express/MongoDB 应用程序中处理数据访问对象/层

javascript - 在 HTML5 Canvas 中创建带有碎片的方格板

javascript - react .js : Stop render from scrolling to top of page

node.js - Sequelize Hook before create 找到最后创建的字段值并增加新值+1

javascript - 文本字段的条件是焦点

node.js - 在 AWS Lambda 上发出 https 请求