Zapp: nodeValue oder innerText - im IE - zu viel CPU Zeit

Beitrag lesen

Hallo Thomas,

Ich habe mal einen Test mit 300 td-Zellen gemacht, die im 5-Sekunden-Takt mit Zufallszahlen gefuellt werden: http://www.styleassistant.de/test/zz2table.htm und bewusst einen etwas aelteren Rechner verwendet (200 MHz MMX, 128 MB, W2KSP3).

Ich habe dein Beispiel mal etwas verändert:

----------------------------------------------
<script language="JavaScript" type="text/javascript">
<!--

function init()
{
   data=new Array();
   for(i=0;i<document.getElementsByTagName("td").length;i++)
     data[i]=document.getElementsByTagName("td")[i].firstChild;
}

function ZZ2Table()
{
  for(i=0;i<data.length;i++)
  {
    data[i].nodeValue=Math.round(Math.random()*100000);
  }
}

//-->
</script>
</head>
<body onload="init();ZZ2Table();setInterval('ZZ2Table()',5000);">
----------------------------------------------

Bei mir (IE5.5/win98) wird die CPU-Last dadurch deutlich reduziert.

Außerdem habe ich die Erfahrung gemacht, dass man DOM-Zugriffe zum Teil erheblich beschleunigen kann, wenn man die Objekte noch mal im lokalen Scope der Funktion definiert, also z.B:

function ...
  var obj=document.getElementsByTagName("td");
  var objL=obj.length;
  for(i=0;i<objL;i++)
    obj[i] ...

Der Effekt fällt umso mehr ins Gewicht, je komplexer der Elementenbaum ist, und ist im IE5 besonders ausgeprägt.
Sogar dieses objL bringt manchmal noch was; sonst wird offenbar bei jedem Schleifendurchlauf die Länge des Arrays wieder neu abgefragt, da sie sich ja geändert haben könnte.

Grüße, Stefan