6

ユーザーの接続速度を確認する可能性を探しています。Cookie として保存されることになっているため、速度が遅い場合は css ファイルと同様に javascript ファイルが適応されます。

現時点で速度をテストする可能性は次のとおりです

    $kb = 512;

    flush();
    //
    echo "<!-";
    $time = explode(" ",microtime());
    for($x=0;$x<$kb;$x++){
        echo str_pad('', 512, '.');
        flush();
    }
    $time_end = explode(" ",microtime());
    echo "->";

    $start = $time[0] + $time[1];
    $finish = $time_end[0] + $time_end[1];
    $deltat = $finish - $start;

    return round($kb / $deltat, 3);

それは機能しますが、コードに非常に多くの文字を入れるのは好きではありません。また、これをすべてエコーすると、出力が既にあるため、結果を Cookie に保存できません。

何か別のファイルでこのようなことをすることはできますか? 解決策はありますか?

前もって感謝します。

4

7 に答える 7

8

解決策はありますか?

私の解決策は、速度テストをまったく気にしないことです。理由は次のとおりです。

テストの理由は、どの JS/CSS ファイルを送信するかを決定するためだとおっしゃいました。ブラウザーは、最初のダウンロード後にこれらのファイルをキャッシュすることに注意してください (変更されていない限り)。つまり、256K のテスト データを送信して、さらに 512K を送信する必要があるかどうかを判断していることになります。

データを送信するだけでキャッシュされます。MBs の JS/CSS を持っていない限り (その場合、速度テストではなく、サイトの再設計が必要です)、ダウンロード時間は実行可能です。速度テストは、ストリーミング ビデオなどのために予約する必要があります。

于 2010-10-15T16:08:36.417 に答える
3

私が思いつくことができる唯一のアイデアは、リダイレクトです。

  • ユーザーの速度を測定する
  • インデックスにリダイレクト

これは良い解決策ではありませんが、ユーザーの速度を 1 回だけ測定すればよいので、許されると思います。

于 2010-10-15T14:16:03.693 に答える
1

JavaScript を使用して、ページの読み込みにかかる時間を計ってみませんか。次に、JavaScript を使用して Cookie を設定します。

JavaScript のマイクロタイムhttp://phpjs.org/functions/microtime:472

jQuery の使用

<head>
<!-- include jquery & other html snipped -->

<script>

function microtime (get_as_float) {
    // http://kevin.vanzonneveld.net
    // +   original by: Paulo Freitas
    // *     example 1: timeStamp = microtime(true);
    // *     results 1: timeStamp > 1000000000 && timeStamp < 2000000000

    var now = new Date().getTime() / 1000;
    var s = parseInt(now, 10);

    return (get_as_float) ? now : (Math.round((now - s) * 1000) / 1000) + ' ' + s;
}

function setCookie(c_name, value, expiredays) {
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

start = microtime(true);

$(window).load(function () {
  // everything finished loading
  end = microtime(true);
  diff = end - start;
  // save in a cookie for the next 30 days

    setCookie('my_speed_test_cookie', diff, 30);
});

</script>
</head>
<body>
<p>some page to test how long it loads</p>
<img src="some_image_file.png">
</body>

いくつかの落とし穴: - ページの読み込みを最初に開始する必要があります。JQuery をロードする必要があります (または、上記のコードを修正して jQuery を回避できます)。

  • 文字が圧縮される可能性があるため、ASCII / Latin データの速度をテストすると、最良の結果が得られない場合があります。高レベルの gzip 圧縮に加えて、一部のモデム/回線 (すべてではないにしても) には、繰り返し文字を検出し、次の 500 が ' ' の繰り返しであることを相手側に伝えることができる基本的な圧縮があります。圧縮されたバイナリデータを使用するのが最善だと思います
于 2010-10-15T14:58:59.513 に答える
1

最初のページ (おそらくすべての外部ファイルで 100kB) にアクセスすると、セッションがすぐに開始されます。

$_SESSION["start_time"] = time();

ページの読み込みが完了したら (jQuery ウィンドウの読み込みまたは smth:)、時間をかけて再度リクエストを送信し、速度(jQueryRequestTime - $_SESSION["start_time"] / PageSize)を計算して別のセッション変数を設定します。次にクリックするリンクには、css/jsそのために承認されたカスタムを含めることができます。

これは完璧ではありません:)

于 2010-10-16T19:38:10.400 に答える
1

ここでの問題は、これをうまく解決できないことであり、おそらく純粋な PHP では解決できません。あなたが取ったアプローチは、ユーザーに (512x512) = 262 144 バイトの無駄なデータをダウンロードさせます。これは、ほとんどの完全なページよりもはるかに大きくなります。ユーザーの接続が遅い場合、速度テストが終了する前にサイトがダウンしていると想定する可能性があります (10 kB/秒の場合、興味深いものが画面に表示されるまでに 30 分かかります!)。

既知のサイズのファイルに対して AJAX 要求を行い、その所要時間を確認できます。ここでの問題は、それが機能するにはページが既に読み込まれている必要があるため、後続のページでのみ機能することです。

低帯域幅バージョンへのリンク (または読み込みに時間がかかりすぎる場合はリダイレクト) を使用して、データを事前に読み込む "読み込み中" ページ (低速接続からアクセスしたときに GMail で表示されるようなもの) を作成できます。

または、「開始」時間を Cookie に保存し、ページの読み込みが完了したときに AJAX 要求を行うこともできます。これにより、ページの実際の読み込み時間が得られます。それがたとえば 10 秒を超える場合は、低帯域幅バージョンに切り替えることをお勧めします。

ただし、これらのいずれも、最初のアクセスで速度を得ることはできません。また、大きな空のページを前もって送信することも、あまり良い第一印象ではありません。

于 2010-10-15T14:13:07.423 に答える
0

私が考えることができる唯一のことは、IP からネット速度へのルックアップを提供するサービスに加入することです。これらのサービスは、IP アドレスのデータベースを構築し、登録された使用目的をカタログ化することによって機能します。それらは常に正確であるとは限りませんが、出発点を提供します。これらのいずれかに対してユーザーの IP アドレスを検索し、それが何を返すかを確認します。

Ip2Location.comは、DB13 製品から始めて、このようなデータベースを提供しています。

もちろん、目的がサイトのモバイル バージョンである場合は、ユーザー エージェント スニッフィングの方が優れたソリューションです。

于 2010-10-15T15:27:59.620 に答える
0

ユーザーの速度を判断したら、javascript をブラウザーに送信して Cookie を設定し、速度が必要な速度を下回っている場合は、更新またはリダイレクトを行います。

于 2010-10-15T14:53:37.123 に答える