当数据为30-40K时,fnAddData影响页面加载的速度

时间:2015-02-25 10:45:49

标签: javascript jquery datatable

我正在使用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'});

1 个答案:

答案 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);
    });
});