jQuery数据表大数据集延迟

时间:2017-06-26 18:13:19

标签: php jquery mysql datatable

我的jQuery数据表花了太长时间来显示一些数据。

查询很简单。在数据库中,无论大小如何,运行相同的查询都会以微秒为单位返回相同的结果。

以下是查询在我的PHP脚本中的显示方式:

<?php
  $searchCommodity = $_POST['commodity'];

  $select = "SELECT COMM_CODE, KEY_COMM, MOD_DATE, MOD_USER FROM keyTable WHERE KEY_COMM = '$searchCommodity'";
  $query = mysqli_query($dbc, $select);

  $out = array();
  while($row = $query->fetch_assoc())
  {
    $out[] = $row;
  }
  echo json_encode($out);
?>

返回的大多数数据少于1000条记录。但是有一些会返回超过10K到20K的记录。

这导致延迟,如果用户使用Firefox,他们将收到&#34;网页正在减慢浏览器的速度。您想做什么?&#34; 错误消息,他们必须选择“停止&#39;或者&#39;等等。

回到我的jQuery,这是我将参数发送到PHP脚本的方式:

 $('#commoditySelect').on('change', function()
 {
   var commodity = $('#commoditySelect').val();
   $.post('api/searchKeyComms.php', {commodity:commodity}, function(data)
   {
     var table = $('#example1').DataTable();        
     table.clear();
     table.search('').draw();
     var obj = JSON.parse(data);    
     obj.forEach(function(item)
     {
       table.row.add([item.COMM_CODE, item.KEY_COMM, item.MOD_DATE, item.MOD_USER]);
     });
     table.draw();  
   });
 });

在主HTML页面的底部附近,我设置了这样的数据表:

$('#example1').DataTable({
  "dataType": "json",   
  "iDisplayLength": 25,
  "order": [[ 6, "desc" ]],
  "scrollY": 550,
  "scrollX": true,
  "bDestroy": true,
  "stateSave": true
});

我可以添加/更改上述任何代码,以提高数据表呈现的性能吗?

我找到了这个页面:https://datatables.net/forums/discussion/2651/alternative-server-side-php-script

但我没有做任何连接。如上所述,它是我正在使用的简单查询,在数据库中,数据会快速返回。

我甚至找到了这个页面:rendering large server-side datasets in jquery datatables

但我从该页面得到的唯一一件事是数据表不是为大型数据集而制作的。 20K似乎不会太大。

1 个答案:

答案 0 :(得分:1)

为什么循环你的$ out数组,因为你的$ row已经是一个关联数组..不需要循环.. ^ _ ^

<?php
      $searchCommodity = $_POST['commodity'];

      $select = "SELECT COMM_CODE, KEY_COMM, MOD_DATE, MOD_USER FROM keyTable WHERE KEY_COMM = '$searchCommodity'";
      $query = mysqli_query($dbc, $select);

      $row = $query->fetch_assoc()
      echo json_encode($row);
    ?>