javascript - Javascript快速生成一定大小的垃圾数据

标签 javascript dynamically-generated

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

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

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 字节的字符串,然后不断将其添加到自身,直到达到所需的长度。

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

最佳答案

如果你想生成要上传的数据,并且不关心它是随机,有一种方法可以使用 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

的上传速度

关于javascript - Javascript快速生成一定大小的垃圾数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11406046/

相关文章:

javascript - 如果输入 type=text 有重复条目,如何更改 CSS

javascript - 将 python 变量转换为 javascript 变量

css - 从 JSF 托管 bean 生成 CSS

c# - 如何在 WPF 应用程序中动态生成标签、按钮、复选框和文本框

android - 自定义 View 的不同单元格大小网格

javascript - Angular Testing : Spy a function that was executed on the initialize of a controller

javascript - 期望一个赋值或函数调用,而是看到一个 expression.eslint no-unused-expressions

javascript - Chart.js 的垂直网格线问题

Jquery .change() 函数不适用于动态填充的 SELECT 列表

生成 future 时间间隔的非线性直方图的算法