AJAX调用大结果集写入DOM

时间:2016-12-21 19:03:28

标签: javascript php jquery ajax dom

我正在编写一个应用程序,允许用户动态选择他们想从我们的数据库中提取哪些列(所有公共内部数据)以及自定义他们的逻辑(WHERE子句)。

这些查询的结果集可以是从10条记录到超过35,000条记录的整个表格中的任何内容。

在加载结果页面时,我触发一个AJAX函数,该函数运行用户选择的查询,并触发存储过程来运行查询。然后将这些数据传递给AJAX成功函数并呈现给DOM,以便对其进行操作,导出等。

-

问题:

当人们选择下载整个表格时(不经常但某些部门需要),我们会遇到超时问题。

我试图找出瓶颈在哪里尝试并改善体验。

当我直接在数据库上运行35,000记录结果集的查询时,它通过VPN大约需要12秒,所以我认为问题不在于数据库本身。

enter image description here

您可以在上图中看到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写那么多数据,但他们有理由希望它完成并且我正在遵循指示。

  1. AJAX调用的成功函数是否包含DOM 操作或者一旦检索到数据就成功了 来源?
  2. 除了在批量数据的分页方法中进行多次调用之外,是否有更好的方法来处理此类情况?
  3. 你能帮我辨认这里的主要瓶颈是什么东西被挂起来了吗?
  4. 感谢您的任何指示。

0 个答案:

没有答案