我正在使用fnAddData和fnDraw函数动态地在数据表中添加数据,它正在按需要工作但页面在加载时需要10-20秒。有什么方法可以加快它的速度?我的代码如下:
$(window).load(function()
{
$.ajax({
type: "GET",
url: "filters.php",
data: {limit: 10000, start_from: (i * 10000)},
success: function(response) {
var array = JSON.parse(response);
Object.keys(array).forEach(function(key) {
oTable.fnAddData([
array[key][1],
array[key][2],
array[key][3],
array[key][4],
array[key][5],
array[key][6],
array[key][7],
array[key][8],
array[key][9],
array[key][10],
array[key][11],
array[key][12],
array[key][13],
array[key][14],
array[key]['link']
], false);
});
oTable.fnDraw();
},
datatype: 'json'});
答案 0 :(得分:2)
您获得了10000个结果,您是否考虑过使用限制/偏移量以较小的“块”请求数据并实施分页或无限滚动?
伪代码 -
function updateTable(data) {
//use data to update table
}
function getData(offset, limit, order, orderBy, filter) {
$.ajax({
url: ...
...
data: {
limit: limit,
start_from: offset,
order: order,
orderBy: orderBy,
filter: filter
},
success: function (data) {
updateTable(data)
}
});
}
$(function () {
getData(0, 20, 'ASC', 'ID', null);
$table.on('scroll', function () {
//infinite scroll bits
//if should load more data call getData(offset, limit)
});
$search.on('blur', function () {
getData(0, 20, 'ASC', 'ID', $(this).val());
});
$orderBy.on('change', function () {
var order;
if (orderBy === $(this).val()) {
order = 'DESC'
} else {
order = 'ASC'
}
getData(0, 20, order, this.val(), null);
});
});