我有这个 ajax 调用从客户端执行,使用 jQuery,但有时(我的意思是通常在第一次调用时)它执行非常慢,也许这个图会解释..
如您所见,最后一次调用在任何事情之前都等待了609 毫秒,虽然接收数据需要210 毫秒,这是可以忍受的,但是为什么要等待609 毫秒呢?
Fiddler 的统计数据是
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 "";
}
}
那么,是什么导致它花费了这么多时间呢?此外,作为一项附加措施,考虑到第一次调用此代码可能会很慢,我在页面加载时使用虚拟参数调用此代码,这样当使用真实数据调用代码时,这不是第一次,也不是关于服务器的任何事情正在设置,缓存或任何已经完成的事情。但是仍然没有运气,无论天气如何,无论我在页面加载时是否使用虚拟数据调用此代码,第一次调用时总是很慢。谁能向我解释为什么会这样?