Search This Blog

Monday, March 8, 2010

How to speed up the reading of innerHTML in IE8?

Programmer Question

I am using JQuery with the DataTable plugin, and now I have a big performnce issue on the following line.



aLocalData[jInner] = nTds[j].innerHTML; // jquery.dataTables.js:2220


I have a ajax call, and result string in HTML format. I convert them into HTML nodes, and that part is ok.



var $result = $('<div/>').html(result).find("*:first");
// simlar to $result=$(result) but much more faster in Fx


Then I activate enable the result from a plain table to a sortable datatable. The speed is acceptable in Fx (around 4sec for 900 rows), but unacceptable in IE8 (more then 100 seconds).



I check it deep using the buildin profiler, and found the above single line take all 99.9% of the time, how can I speed it up? anything I missed?



            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++ )
{
nTd =nTds[j];
if ( nTd.nodeName == "TD" )
{
aLocalData[jInner] = nTd.innerHTML; // jquery.dataTables.js:2220

jInner++;
}
}
}
}


Find the answer here

No comments:

Post a Comment

Related Posts with Thumbnails