innerHTML Versus DOM> Тест, кажется, некорректный. На один вызов innerHTML и тебя два DOMовых, естественно, результаты нивелируются. Кроме того, создание пустых дивов - это не совсем интересно, и никому не нужно. Следующее: > > <form><textarea id=report rows=30 cols=80></textarea></form> > <button onclick=runTest(testHTML,'innerHTML')>html</button> > <button onclick=runTest(testDOM,'DOM')>DOM</button> > > <script> > var cntEls=1000; > > function runTest(func,desc){ > .var div=document.createElement("DIV");document.body.appendChild(div); > .var d1=new Date();func(div);var d2=new Date(); > .document.forms[0].report.value+="\n"+desc+"="+(d2-d1);} > > function testHTML(div){ > .for(var a=[],i=0;i<cntEls;i++) a[i]="<span id=XX"+i+">"+i+"</span>"; > .div.innerHTML=a.join("");} > > function testDOM(div){ > .for(var i=0;i<cntEls;i++){ > ..var span=document.createElement("SPAN"); > ..span.id="YY"+i; > ..span.appendChild(document.createTextNode(i)); > ..div.appendChild(span);}} > </script> > > показывает принципиально другие результаты. > > Насчет компиляции скрипта во что-то там супер-эффективное - сказки, имхо. Любой вызов ядра требует хотя бы резолюции переменных, причем динамической. Откуда собственно "умный компилятор" знает, что я не назвал свою переменную "document", а свою функцию "appendChild"? |