1

我正在用 Javascript 编写上传速度测试。我正在使用 Jquery(和 Ajax)将数据块发送到服务器,以便计算获得响应所需的时间。从理论上讲,这应该可以估计上传速度。

当然,为了满足用户的不同带宽,我会依次上传越来越多的垃圾数据,直到达到阈值持续时间。目前我使用以下函数生成垃圾数据,但是,生成兆字节数据时速度很慢。

function generate_random_data(size){
    var chars = "abcdefghijklmnopqrstuvwxyz";
    var random_data = "";
    for (var i = 0; i < size; i++){
        var random_num = Math.floor(Math.random() * char.length);
        random_data = random_data + chars.substring(random_num,random_num+1);
    }
    return random_data;
}

实际上,我所做的只是生成一大块字节以发送到服务器,但是,这是我在 Javascript 中找出方法的唯一方法。

任何帮助,将不胜感激。

更新:我已经重新编写了我的代码,使其只是一个 10 字节字符串的重复,而不是一个完全随机的字符串。

function generate_random_data(attempt){
    var table = {
        '1':10, //10kb  
        '2':12, //40kb
        '3':14, //160kb
        '4':16, //640kb
        '5':18, //2.5Mb
        '6':20 //10Mb
    }
    var random_data = "abcdefghij";  //10 bytes
    for (i = 0; i < table[attempt]; i++){
        random_data += random_data;
    }
    return random_data;

现在该函数接受尝试次数的参数(所以我的脚本第一次尝试上传它会做最小的文件,然后是下一个最小的文件,依此类推)。然后它得到一个 10 字节的字符串,然后不断地将它添加到自身,直到达到所需的长度。

这是最好的方法吗?有没有更好的办法?

4

5 回答 5

7

如果您想生成要上传的数据,并且不关心它是随机的,那么有一种方法可以使用Blob对象来完成

// Size should be given in 'bytes'
function generate_random_data(size) {
    return new Blob([new ArrayBuffer(size)], {type: 'application/octet-stream'});
};

我最近用它来测试我的上传速度http://httpbin.org/post

于 2018-08-26T08:59:54.427 回答
3

如果您正在寻找类似于Jose Arandi 的答案,但对于 NodeJS,您可以使用Buffer

Buffer.alloc(10)给你 10 个零字节。Buffer.allocUnsafe(10)不初始化缓冲区,给你 10 个“随机”字节。

于 2021-02-01T19:34:12.027 回答
2

只是一个评论......</p>

以下至少在 IE 中要快得多:

function generate_random_data1(size){
    var chars = 'abcdefghijklmnopqrstuvwxyz'.split('');
    var len = chars.length;
    var random_data = [];

    while (size--) {
        random_data.push(chars[Math.random()*len | 0]);
    }

    return random_data.join('');
}
于 2012-07-10T03:35:12.107 回答
0

这里只是一个小想法,我们为什么要如此努力地使数据应该是随机的。您可以尝试发送大块的字符。说如果大小是 1000。你可以发送 'a...z' 37 次。这将加快数据的生成。最后你需要发送一些数据来检查速度而不是生成随机数据。您还可以考虑在字符中包含大写字母和数字,以进一步提高生成此数据的速度。

通过这样做,您将能够跳过所有在随机数据中查找和附加字符的调用。

于 2012-07-10T03:22:26.377 回答
0

您可以在页面上有一个变量,其中包含 1-100k 的硬编码数据,然后可能将其中一些块连接在一起。字符串连接可能会非常慢,因此您需要对其进行测试以查看它是否执行正常。

于 2012-07-10T03:11:38.587 回答