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"? |