我正在编写一个应用程序,允许用户动态选择他们想从我们的数据库中提取哪些列(所有公共内部数据)以及自定义他们的逻辑(WHERE子句)。
这些查询的结果集可以是从10条记录到超过35,000条记录的整个表格中的任何内容。
在加载结果页面时,我触发一个AJAX函数,该函数运行用户选择的查询,并触发存储过程来运行查询。然后将这些数据传递给AJAX成功函数并呈现给DOM,以便对其进行操作,导出等。
-
问题:
当人们选择下载整个表格时(不经常但某些部门需要),我们会遇到超时问题。
我试图找出瓶颈在哪里尝试并改善体验。
当我直接在数据库上运行35,000记录结果集的查询时,它通过VPN大约需要12秒,所以我认为问题不在于数据库本身。
您可以在上图中看到POST呼叫发生超时的位置。
我试图了解进程如何为DOM提取/写入数据。从数据库中获取数据的连接是否超时,或者我们是否已成功获取该数据但是我们正在尝试写入35,000个表行?
示例代码:
var output = '';
$.ajax({
url: "api/fetchDashboardRender",
type: 'POST',
cache: false,
data: {
dashboardID: dashboardID
},
error: function(err) {
alert(err.statusText);
},
success: function(data) {
// Example .. Loop over the data in the result set
$(data).each(function(){
// Append each table row to a variable
output += '';
});
// Once done, append the variable to the DOM
$('#results').append(output);
}
});
问题:
虽然我知道没有必要向DOM写那么多数据,但他们有理由希望它完成并且我正在遵循指示。
感谢您的任何指示。