我有一个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,但没有一个帮助。