2012-07-10 46 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(''); 
}