Wie beschleunige ich das Lesen von innerHTML im IE8?

Ich verwende JQuery mit dem DataTable-Plugin und habe jetzt ein großes Leistungsproblem in der folgenden Zeile.

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

Ich habe einen Ajax-Aufruf und eine Ergebniszeichenfolge im HTML-Format. Ich konvertiere sie in HTML-Knoten, und dieser Teil ist in Ordnung.

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

Dann aktiviere ich das Ergebnis aus einer einfachen Tabelle in eine sortierbare Datentabelle. Die Geschwindigkeit ist in Fx akzeptabel (ungefähr 4 Sekunden für 900 Zeilen), in IE8 jedoch nicht akzeptabel (mehr als 100 Sekunden).

Ich überprüfe es gründlich mit dem eingebauten Profiler und stellte fest, dass die obige einzelne Zeile 99,9% der Zeit in Anspruch nimmt. Wie kann ich es beschleunigen? etwas, was ich verpasst habe?

            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++;
                        }
                    }
                }
            }

Antworten auf die Frage(5)

Ihre Antwort auf die Frage