테이블에서 숫자를 클릭 한 다음 데이터베이스에서 다른 테이블을 읽어야하는 페이지가 있습니다. 두 번째 테이블을 생성하기 위해 ASP 그리드 뷰를 사용했습니다. 그런 다음 jquery ajax를 사용하려고했습니다. 20,000 개의 레코드를 요청해야 할 때 jquery ajax는 매우 느리며 (로드하는 데 약 6 초) asp gridview가 훨씬 빠릅니다.Ajax 요청이 너무 느립니다.
ASPX.VB
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
<WebMethod()> _
Public Shared Function GetOrderDetail(ByVal id As String) As String
Dim orderNum As Integer = Integer.Parse(id)
Dim sbTable As New StringBuilder
Dim sql As New StringBuilder
sql.Append("SELECT oh.[ORDERNO], od.[STYLE], s.[STYLEDESC],od.[COLOR], c.[COLORDESC], od.[SIZE],")
sql.Append(" SUM(CONVERT(DECIMAL(12,0),od.[TOTALQTY])) AS 'Item_Total', och.[TRACKINGNO]")
sql.Append(" FROM [OrderHeader] AS oh INNER JOIN [test1] AS ocd")
sql.Append(" ON oh.[ORDERNO] = ocd.[ORDERNO] INNER JOIN [test2] AS och")
sql.Append(" ON ocd.[FKEY] = och.[PKEY] INNER JOIN [test3] AS od")
sql.Append(" ON oh.[ORDERNO] = od.[ORDERNO] INNER JOIN [test4] as s")
sql.Append(" ON s.[STYLE] = od.[STYLE] INNER JOIN [test5] AS c")
sql.Append(" ON c.[COLOR] = od.[COLOR]")
sql.Append(" WHERE od.[ORDERNO] =")
sql.Append(orderNum)
sql.Append(" GROUP BY oh.[ORDERNO], od.[STYLE], s.[STYLEDESC],od.[COLOR], c.[COLORDESC], od.[SIZE], och.[TRACKINGNO]")
sql.Append("select [ORDERNO] from [oabcd].[dbo].[OrderHeader] where [ORDERNO] =")
sql.Append(orderNum)
Dim connMain As Data.SqlClient.SqlConnection
Dim cmdMain As Data.SqlClient.SqlCommand
Dim rdrMain As Data.SqlClient.SqlDataReader
connMain = New Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("SsssConnectionString").ConnectionString)
connMain.Open()
cmdMain = New Data.SqlClient.SqlCommand(sql.ToString(), connMain)
rdrMain = cmdMain.ExecuteReader()
Dim bAlt As Boolean = True
If rdrMain.HasRows Then
sbTable.Append("<table class = 'orderDetailTable'>")
sbTable.Append("<thead>")
sbTable.Append("<tr>")
sbTable.Append("<th>")
sbTable.Append("Order Number")
sbTable.Append("</th>")
sbTable.Append("<th>")
sbTable.Append("Item")
sbTable.Append("</th>")
sbTable.Append("<th>")
sbTable.Append("Color")
sbTable.Append("</th>")
sbTable.Append("<th>")
sbTable.Append("Size")
sbTable.Append("</th>")
sbTable.Append("<th>")
sbTable.Append("Item Total")
sbTable.Append("</th>")
sbTable.Append("<th>")
sbTable.Append("Tracking Number")
sbTable.Append("</th>")
sbTable.Append("</tr>")
sbTable.Append("</thead>")
sbTable.Append("<tbody>")
While rdrMain.Read()
sbTable.Append("<tr>")
sbTable.Append("<td>")
sbTable.Append(rdrMain.Item("ORDERNO"))
sbTable.Append("</td>")
sbTable.Append("<td>")
sbTable.Append(rdrMain.Item("STYLEDESC"))
sbTable.Append("</td>")
sbTable.Append("<td>")
sbTable.Append(rdrMain.Item("COLORDESC"))
sbTable.Append("</td>")
sbTable.Append("<td>")
sbTable.Append(rdrMain.Item("Size"))
sbTable.Append("</td>")
sbTable.Append("<td>")
sbTable.Append(rdrMain.Item("Item_Total"))
sbTable.Append("</td>")
sbTable.Append("<td>")
sbTable.Append(rdrMain.Item("TRACKINGNO"))
sbTable.Append("</td>")
sbTable.Append("</tr>")
End While
sbTable.Append("</tbody>")
sbTable.Append("</table>")
End If
rdrMain.Close()
cmdMain.Dispose()
connMain.Close()
connMain.Dispose()
Return sbTable.ToString()
End Function
JS
$('.orderNumber').on('click', function() {
var orderNum = $(this).text();
console.log(orderNum);
$.ajax({
type: "POST",
url: "Order.aspx/GetOrderDetail",
data: "{'id' :'" + orderNum + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
$('#orderDetail').html(result.d);
$('.orderDetailTable').dataTable({
});
},
error: function (xhr, status, error) {
// Display a generic error for now.
alert("Ajax Read Detail Error!");
}
});
});
난 (20,000 레코드를 포함) 매우 큰 문자열을 반환. 내 질문은 : 반환 다른 유형의 코드를 향상시킬 수있는 방법이 있습니까? 아니면 아무 것도 그냥 HTML을 생성 asp에서 GetOrderDetail()
함수를 반환하지? 요청을 더 빨리 할 수있는 것은 무엇입니까? 감사.
최적화 문제와 마찬가지로 문제를 해결하기 전에 느린 것을 알아야합니다. Chrome의 개발자 도구 네트워크 탭과 같은 도구를 사용하면 시간이 어디에 있는지에 대한 자세한 정보를 얻을 수 있습니다. 조회/연결, 첫 번째 바이트 대기 및 데이터 수신 사이의 시간을 분해합니다. 그렇게하면 고칠 필요가있는 것에 대한 단서가 생깁니다. – slashingweapon
한 번에 20K 개의 레코드를 반환하지 않고 대신 페이징을 구현할 수 있습니까? –
json 데이터를 반환하는 것처럼 보이지 않습니다. 테이블 데이터를 반환하는 것처럼 보입니다.이 데이터는 훨씬 커질 것이고 함께 쓰는 데 더 오래 걸릴 것입니다. – slashingweapon