如何使用表单加速datatables插件?

时间:2016-06-30 17:47:09

标签: jquery coldfusion datatables

我使用datatables插件来显示表格数据。 一切都在发现,直到桌子准确地得到更多的记录12k。现在它超级慢,我通常不得不停止脚本'。 我有一个表单,从这个表单我可以根据我想要获得的具体数据更改表中显示的内容。在向表中添加更多记录之前,此工作正常。

首先我显示表中的所有记录,当用户提交表单时,它会更改从表中返回的记录。

我该怎么做才能加快这个过程?

<script type="text/javascript" class="init">
$(document).ready(function() {
    $('#example').DataTable( {
        "order": [[ 3, "desc" ]],
        "aLengthMenu": [[10,25, 50, 75,100, -1], [10,25, 50, 75,100, "All"]],
    "pageLength": 1000

    } );
} );

</script>

<form  name="fraud_view"    action="" method="post">
      <td> <input type="submit" name="submit" value="submit" ></td>
</form>

<cfif structKeyExists(FORM, "submit")>


<cfquery datasource="test" name="Get_data">
  SELECT * FROM tablename
  where 1 = 1  ect...
<cfelse>
  <cfquery datasource="test" name="Get_data">
select *
from tablename
order by date desc
</cfquery>

</cfif>  
<!--- here im displaying the table date --->
<table id="example" class="display " cellspacing="1" width="100%">
        <tbody>
          <cfoutput query="Get_data">
              </td>
                <td>#account_num#</td>
                <td>#first_name#</td>
                <td>more collums</td>
            </tr>
            </cfoutput>
        </tbody>
    </table>

2 个答案:

答案 0 :(得分:4)

就像已经提到过的一些评论一样,您可能需要查看server-side processing选项(此示例使用PHP脚本,但您可以使用任何所需的服务器端后端)。基本思想是,不要让jQuery和JavaScript代码处理诸如分页,排序,搜索等内容,客户端可以使用更快的语言在服务器上完成处理,然后返回结果。

例如,假设您想过滤结果(无关紧要)并获得前10%。如果您不使用服务器端,则所有处理和过滤都必须由插件完成,并且必须处理所有12k行。如果你使用服务器端处理,你告诉服务器你想要前10%,然后它只显示那些结果的值,这意味着插件只需要处理1200行而不是12000

如果您不熟悉服务器端语言,这可能很棘手,但一种选择是使用作者开发的.NET或PHP库(位于here和{{3 }}, 分别)。这些确实需要编辑器扩展的许可证,但这不是免费的,但确实为DataTables添加了许多不错的功能。

如果您想开发自己的服务器端代码,请查看here文档页面,其中概述了需要执行的操作以及执行操作的方式。它可能有点复杂,但它会大大提高DataTables的速度。

答案 1 :(得分:1)

服务器端数据表很可能是最好的选择(正如其他人提到的那样),但确实存在明显的缺点,例如必须为每个请求重新加载数据,例如过滤,排序,编辑等以及设置起来要复杂得多。

如果服务器端不可用,那么最好的办法就是一次减少显示的数据量。

我假设你每行显示大量数据,因为我设法加载缓慢但是ajax数据源上的30k行工作数据表(它仍然需要像html一样加载所有数据)。

切割列是一种可能性,但如果您只需要较少的一些数据(例如长文本描述),实现基于ajax(或基于html5数据属性)的子行可以很好地减少列,然后显示更多每行需要时需要庞大的数据https://datatables.net/examples/api/row_details.html

此外,您可以在数据呈现到页面之前对数据实施自己的过滤器(有时您实际上并不需要一直查看所有大型数据集)