私はこのajax呼び出しをクライアント側からjQueryを使用して実行していますが、時々(つまり、通常は最初の呼び出しで)実行が非常に遅くなります。おそらくこの図で説明できます。
ご覧のとおり、最後のコールは何よりも609ミリ秒待機していますが、データの受信には210ミリ秒かかりましたが、それは耐えられますが、なぜ609ミリ秒待機するのでしょうか。
フィドラーの統計は
Request Count: 1
Bytes Sent: 552 (headers:543; body:9)
Bytes Received: 364 (headers:234; body:130)
ACTUAL PERFORMANCE
--------------
ClientConnected: 15:16:42.799
ClientBeginRequest: 15:16:42.799
GotRequestHeaders: 15:16:42.799
ClientDoneRequest: 15:16:42.799
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 15:16:42.799
FiddlerBeginRequest:15:16:42.799
ServerGotRequest: 15:16:43.408
ServerBeginResponse:15:16:43.408
GotResponseHeaders: 15:16:43.408
ServerDoneResponse: 15:16:43.408
ClientBeginResponse:15:16:43.408
ClientDoneResponse: 15:16:43.705
jQueryは特別なものではなく、単純なajax呼び出しです...
$.ajax({
url: '/AutoComplete.asmx/GetPriorityAndRemarks',
type: 'POST',
timeout: 20000,
datatype: 'xml',
cache: false,
data: 'arg=' + custCode,
success: function (response) {
var result = $(response).find("string").text();
// the values is in form of name, address, mobile, priority and remark, and discount
var resultAry = result.split(':');
//alert(resultAry);
$('#txtCustomerName').val(resultAry[0].trim());
$('#lblAddress').text(resultAry[1]);
$('#lblMobileNo').text(resultAry[2]);
$('#lblPriority').text(resultAry[3]);
$('#lblRemarks').text(resultAry[4]);
$('#txtDiscount').val(resultAry[5]);
$('#txtQty').focus();
$('#txtQty').select();
$('#hdnCustCode').val(custCode);
return false;
},
error: function (response) {
alert('some error occured');
}
});
コードは次のように実装されます
public string GetPriorityAndRemarks(string arg)
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "sp_NewBooking";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@BranchId", Globals.BranchID);
cmd.Parameters.AddWithValue("@CustCode", arg);
cmd.Parameters.AddWithValue("@Flag", 31);
return PrjClass.ExecuteScalar(cmd);
}
catch (Exception)
{
return "";
}
}
それで、何がそんなに時間がかかるのですか?また、追加の手段として、このコードを最初に呼び出すのは遅いかもしれないと考えて、ページの読み込み時にダミーの引数を使用してこのコードを呼び出しました。これは、コードが実際のデータで呼び出されたときに、サーバーに関するものが初めてではないようにするためです。セットアップ、キャッシング、またはすでに行われていることは何でも。しかし、それでも運が悪いので、天気に関係なく、ページの読み込み時にダミーデータを使用してこのコードを呼び出すかどうかに関係なく、最初の呼び出しを行うときは常に呼び出しが遅くなります。なぜこれがこのように起こっているのか誰かが私に説明できますか?