2

私はこのような方法を見ています:

function aa() {
    var start = new Date().getTime();
    $.ajax({
        cache: false,
        url: href + params.param,
        dataType: 'html'
    })
    .done(function (responseText) {
        xx();
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        yy();
    })
    .always(function () {
        zz(start);
    });
};

function zz(start) {
    var end = new Date().getTime();
    var elapsed = end.getMilliseconds() - start.getMilliseconds();
}

初めに。これは、かかる時間を測定するための有効な方法ですか?また、私がこれを行うことができる別の方法があります。たとえば、Ajaxヘッダーから何かを読み取る方法はありますか?もしそうなら、どのように読み取ることができますか?

HTMLページで時間を報告できるように、コードで解決策を探していることに注意してください。

4

5 に答える 5

1

これは、リクエストが発行されてからデータが返されるまでの時間を測定するための絶対的に有効な方法です。目標は、クライアントが要求を発行してから応答を受信するまでの経過時間を測定することであるため、クライアントの時計を使用するのが理想的です。(通常、サーバーとクライアントの時計の同期を伴う時間比較は避けたいと思いますDate:。HTTPヘッダーを使用するとそれが可能になります。)

改善するために私がすることは2つあります。

  • always最初にハンドラーをバインドします。Deferredコールバックは追加された順序で実行されるため、最初にバインドすると、ハンドラーalwaysでの計算コストの高い操作によって測定値が破棄されることはありません。done

  • Dateオブジェクトをインスタンス化する必要はありません。staticDate.now()は、現在の時刻をミリ秒単位で数値として返します。

done/failコールバックで使用できるように、スコープ内で経過計算を実行することもできます。

function aa() {
    var start = Date.now(), elapsed;
    $.ajax({
        cache: false,
        url: href + params.param,
        dataType: 'html'
    })
    .always(function () {
        elapsed = Date.now() - start;
    });
    .done(function (responseText) {
        xx(elapsed);
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        yy(elapsed);
    });
};
于 2012-08-29T01:33:53.243 に答える
0

たまにページをリロードし、独自のログを保持するある種の監視PCを実行するかもしれません...転送に時間がかかりすぎる場合は、アラートを送信します。

* nixでは、単純なスクリプトとwgetおよび/またはcurlを使用してそれを自動化できます。

于 2012-08-29T01:06:34.180 に答える
0

Firefox用のFirebugは、通話にかかる時間を教えてくれます

于 2012-08-29T00:51:05.817 に答える
0

私はあなたの道がかなりきれいだと主張します。自分でリクエストを配置しない限り、リクエストにかかる時間を示す応答には何も組み込まれていません。ただし、ある種のサーバー側のロギングを実行しようとすると、要求がネットワークを通過するのにかかる時間が考慮されません。

于 2012-08-29T00:57:28.353 に答える
0

Rubyまたは.Netを使用している場合は、MiniProfilerを参照してください。それはあなたが望むことをします。または、彼が内部でどのようにそれを行っているかを確認することができます。

于 2012-08-29T01:23:43.397 に答える