javascript - 如何加快我的 ajax 调用并追加到表中?

标签 javascript jquery ajax

我有一个 ajax 调用,调用了大约 1,000 行并更新了我网页上的表格。

在等待表格更新时,页面卡住大约 10 秒 - 页面无法滚动,鼠标悬停不起作用等。

做了一些实验,ajax 调用似乎并没有影响页面。它似乎是卡住页面的“追加”功能。

我已在网上阅读有关如何使这更快的信息,但没有任何改进。

我的原始代码是...

$.ajaxSetup({ async: true });
$.ajax({
  cache: false,
  url: 'ajax_addtablerows.php',
  dataType: 'json',
  success: function(data) {
  $.each(data, function (i,obj) {
    tableUpdate = '<tr><td class="col1">' + obj.col1 + '</td><td class="col2">' + obj.col2 + '</td><td class="col3">' + obj.col3 + '</td><td class="col4">' + obj.col4 + '</td></tr>';
    $('#myTable').append(tableUpdate);
  });
},
});

但是我读了一些 SO 文章说循环“追加”调用是个坏主意,所以我更新了我的代码......

var tableUpdate = "";
$.ajaxSetup({ async: true });
$.ajax({
  cache: false,
  url: 'ajax_addtablerows.php',
  dataType: 'json',
  success: function(data) {
  $.each(data, function (i,obj) {
    tableUpdate += '<tr><td class="col1">' + obj.col1 + '</td><td class="col2">' + obj.col2 + '</td><td class="col3">' + obj.col3 + '</td><td class="col4">' + obj.col4 + '</td></tr>';
  });
  $('#myTable').append(tableUpdate);
},
});

并将“追加”移到“每个”循环之外。

但这并没有取得预期的改善。表格更新时,页面仍会卡住大约 10 秒。

如果我删除该行:

$('#myTable').append(tableUpdate);

然后页面不会卡住或变慢(但显然表格不会更新!)

所以这让我相信是导致卡住的“追加”。

还有其他加快速度的技巧吗?

最佳答案

我尝试过的最快的方法如下。看this blog post :

success (data) {
    var arr = [];
    var i = 0;
    var length = data.length;
    for (var j = 0; j < length; j++) {
        arr[i++] = '<tr><td class="col1">';
        arr[i++] = data[j].col1;
        arr[i++] = </td><td class="col2">;
        arr[i++] = data[j].col2;
        arr[i++] = </td><td class="col3">;
        arr[i++] = data[j].col3;
        arr[i++] = </td><td class="col4">;
        arr[i++] = data[j].col4;
        arr[i++] = '</td></tr>';
    }
    $('#myTable').append(arr.join(''));
}

但正如@charlietfl 在评论中提到的,您可能应该减少从 ajax 调用返回的数组数量,让浏览器在合理的时间内呈现它们。您可以在处理完第一批后进行另一个 ajax 调用...

关于javascript - 如何加快我的 ajax 调用并追加到表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47115213/

相关文章:

javascript - 在包含的 div 中创建手电筒效果

javascript - 多个 Bootstrap 模式导致浏览器卡住

javascript - 使用 ExtJS 更新另一个窗口中的事件的一个窗口的内容

javascript - 从数组中删除指定值?

javascript - 如何在网站中添加登录按钮并根据用户身份验证进行更新

javascript - 关于垃圾回收的 Null 和 delete()

javascript - 如何在页面刷新时保留 javascript/jquery 对 DOM 所做的更改

javascript - 在选择的 Enter() 部分中的主要数据元素之前添加 <a> 标记

javascript - 在 Meteor TODO 应用程序中添加另一个字段以形成表单?

javascript - document.ready 与 document.onLoad