IE7上的jQuery dataTables非常慢

时间:2012-05-03 12:06:20

标签: javascript jquery internet-explorer-7 datatables jquery-datatables

我有一个jquery数据表在firefox和chrome上工作得很好,但在IE7上相当慢。 我正在使用数据表版本1.7.6。

这是有9列的表:

this.dataTable = $('#sar-requests-table').dataTable({
    "aaSorting": [[ 4, "desc" ]],
    "aoColumnDefs": [{
        "fnRender": function ( row ) {
            return renderWorkOrderIdTableCell(row.aData[0]);
         },
         "aTargets": [0]
     }],
     "bProcessing": true,
     "bJQueryUI": true,
     "oLanguage": {
         "sSearch": "Filter:"
     }
});

当我调用fnReloadAjax插件时发生缓慢。

 this.dataTable.fnReloadAjax("/api/sar/?_=" + Math.random() + "&" + query);

此调用对Java EE应用程序进行查询,并带来最多5000条记录。 我调试了插件,并指出了需要花费很多时间的地方:

$.fn.dataTableExt.oApi.fnReloadAjax = function ( oSettings, sNewSource,      fnCallback,bStandingRedraw)
{
if ( typeof sNewSource != 'undefined' && sNewSource != null )
{
    oSettings.sAjaxSource = sNewSource;
}
this.oApi._fnProcessingDisplay( oSettings, true );
var that = this;
var iStart = oSettings._iDisplayStart;

 console.log('STEP 1 '+new Date());

oSettings.fnServerData( oSettings.sAjaxSource, null, function(json) {
    /* Clear the old information from the table */
    that.oApi._fnClearTable( oSettings );

    console.log('STEP 2 '+new Date());

    /* Got the data - add it to the table */
    for ( var i=0 ; i<json.aaData.length ; i++ )
    {
        that.oApi._fnAddData( oSettings, json.aaData[i] );
    }
    console.log('STEP 3 '+new Date());

    oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();

    that.fnDraw( that );

    console.log('STEP 4 '+new Date());

    if ( typeof bStandingRedraw != 'undefined' && bStandingRedraw === true )
    {
        oSettings._iDisplayStart = iStart;
        that.fnDraw( false );
    } 

    console.log('STEP 5 '+new Date());

    that.oApi._fnProcessingDisplay( oSettings, false );

    /* Callback user function - for event handlers etc */
    if ( typeof fnCallback == 'function' && fnCallback != null )
    {
        fnCallback( json );
    }

    console.log('STEP 6 '+new Date());
} );
}

大部分时间花在(STEP2和STEP3)和(STEP3和STEP4)之间,共计30秒(如果是5000条记录)。意思是,下面的块需要15秒;

for ( var i=0 ; i<json.aaData.length ; i++ )
    {
        that.oApi._fnAddData( oSettings, json.aaData[i] );
    }

以下一个还需要15秒:

    oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
    that.fnDraw( that );

这两个块都需要不到一秒的时间。在firefox和chrome.I也尝试删除表上的排序和单元格渲染,但没有帮助。当我把“bpaginate:false”,我看到更好的性能,但它不是5000记录的选项。

任何建议表示赞赏。

编辑:我尝试使用版本1.8.0和1.9.1,但没有一个帮助。

0 个答案:

没有答案