DataTableプラグインでJQueryを使用していますが、次の行でパフォーマンスに大きな問題があります。
aLocalData[jInner] = nTds[j].innerHTML; // jquery.dataTables.js:2220
ajax呼び出しがあり、結果文字列がHTML形式です。それらをHTMLノードに変換しますが、その部分は問題ありません。
var $result = $('<div/>').html(result).find("*:first");
// simlar to $result=$(result) but much more faster in Fx
次に、プレーンテーブルから並べ替え可能なデータテーブルへの結果を有効にするをアクティブにします。速度はFxでは許容できますが(900行で約4秒)、IE8では許容できません(100秒以上)。
組み込みのプロファイラーを使用して詳細を確認したところ、上記の1行が99.9%の時間かかることがわかりましたが、どうすれば高速化できますか?私が逃したものは何ですか?
nTrs = oSettings.nTable.getElementsByTagName('tbody')[0].childNodes;
for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
{
if ( nTrs[i].nodeName == "TR" )
{
iThisIndex = oSettings.aoData.length;
oSettings.aoData.push( {
"nTr": nTrs[i],
"_iId": oSettings.iNextId++,
"_aData": [],
"_anHidden": [],
"_sRowStripe": ''
} );
oSettings.aiDisplayMaster.push( iThisIndex );
aLocalData = oSettings.aoData[iThisIndex]._aData;
nTds = nTrs[i].childNodes;
jInner = 0;
for ( j=0, jLen=nTds.length ; j<jLen ; j++ )
{
if ( nTds[j].nodeName == "TD" )
{
aLocalData[jInner] = nTds[j].innerHTML; // jquery.dataTables.js:2220
jInner++;
}
}
}
}