2012-07-10 39 views
0

我正在用Javascript编写上传速度测试。我正在使用Jquery(和Ajax)将数据块发送到服务器,以便计算获取响应所需的时间。理论上,这应该估计上传速度。用Javascript快速生成一定大小的垃圾数据

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

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

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

+3

我不认为你需要生成随机字符用于此目的的,不是吗? – 2012-07-10 03:07:05

+0

使用类似[lipsum.com](http://www.lipsum.com/)的东西来生成一段文字,然后保持加倍。如果你真的想要随机性,把几个段落放在一个数组中,并随机选择它们而不是单个字符。应该足够好。 – RobG 2012-07-10 03:21:49

+0

我会检查一下。 @SiGanteng你说得对,我不需要'随机'数据,甚至'垃圾'数据。我只需要一些特定尺寸的东西发送。 – user1357607 2012-07-10 03:27:01

回答

0

您可以在页面上有一个变量,其中包含1-100k的硬编码数据,然后可能将这些块中的几个连接在一起。字符串串联可能会很慢,尽管如此,您仍然需要对它进行测试以确定它是否正常工作。

0

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

通过这样做,您将可以跳过所有呼叫,以便在随机数据中查找和追加字符。

2

只是评论...

下面是在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(''); 
}