【问题标题】:Optimization of render datatables渲染数据表的优化
【发布时间】:2014-05-12 14:22:14
【问题描述】:

我正在使用 jQuery 数据表和客户端渲染。

使用下面的代码,我尝试用数组元素替换 {{number}},它确实按预期工作。

在 PHP 中我有:

<?php
$returnTmp2['test'] = array(100,'/Home/','Home');
return $returnTmp2;
?>

我正在尝试用 Datatables 的 mRender 函数替换动态值:

$datatableContent['render'] = '<a href="{{1}}{{0}}/">{{2}}</a>';

我想要这个输出:

<a href="/Home/100/">Home</a>

当我有很多行(超过 20 秒)时,问题是加载时间很长。 你知道有什么方法可以优化下图中的代码吗?

更新

完整代码可见于:http://pastebin.com/RHTv0S5N

【问题讨论】:

  • 您使用的是哪个版本的 dt?有多少行是“大量”?
  • 我正在使用 v1.9.1 的 jQuery Datatables 并且我的意思是至少有 12.175 行(它在 CMS f.e. 中用于订单和时事通讯订阅模块)
  • 确实很多 ;-) 但是 Pagnination 应该会有所帮助,我想您很少需要一次查看所有记录...

标签: javascript php performance datatables rendering


【解决方案1】:

您的方法看起来不错,但涉及一些处理,所以我建议让客户端更容易(假设您总是有一个数组包含 {number, url,name} 那么我会这样做

"mRender": function (data, type full) { return '<a href=\'' + data[1] + data[0] + '\'>' + data[2] + '</a>'; }

启用分页也有助于加速渲染...

【讨论】:

  • 感谢您的评论,但恐怕不止一个渲染输出。一些字段只是字符串(PHP 阻止它们被“mRender”渲染),但其他字段需要一个包含未定义数量的项目的数组。一些例子:array('greyOrder','Paid') => &lt;span class="{{0}}"&gt;{{1}}&lt;/span&gt;, array('/Orders/1/','Demo Customer','D. Customer') => &lt;a href="{{0}}" title="{{1}}"&gt;{{2}}&lt;/a&gt;
  • 您不必为整个表格使用单个 mRender,您可以使用 aoColumnDefs (legacy.datatables.net/release-datatables/examples/advanced_init/…) 为各个列提供特定的渲染...
  • 我确实在“aoColumnDefs”中使用了“mRender”,但我使用了一个 PHP 代码和一个设置数组来显示所有数据表。这样我就没有“/js/datatables.orders.js”、“/js/datatables.files.js”、“/js/datatables.images.js”,而是一个文件“/js/datatable.js”。 php" 将被包含在内。
  • 总而言之,我认为不管怎样,这种变化不会有太大的收获——我对这么大的桌子最有效的收获是......通过不立即显示所有内容,即通过提供事先搜索,因此可以减少记录数和/或使用分页...(通过设置 bAutoWidth: false 和使用 CSS 设置列宽也可以获得一些小的改进,但同样,它不会有太大帮助,我猜...这么多行只是需要时间...)
猜你喜欢
  • 2011-10-02
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多