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

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 回送信できます。これにより、データの生成が高速化されます。最後に、速度を確認し、ランダムなデータを生成しないように、いくつかのデータを送信する必要があります。このデータの生成速度をさらに向上させるために、char に大文字と数字を含めることも考えられます。

これを行うことで、ランダム データ内の文字を検索して追加するためのすべての呼び出しをスキップできます。

于 2012-07-10T03:22:26.377 に答える
0

ページに 1 ~ 100k のハードコードされたデータを含む変数を配置し、これらのチャンクのいくつかを連結することができます。ただし、文字列の連結はかなり遅くなる可能性があるため、テストして問題なく動作するかどうかを確認する必要があります。

于 2012-07-10T03:11:38.587 に答える