Сообщение от newobject
|
ixth,
Я уж не знаю, как этот чувачок там тестировал ЭТО, но мои тесты кагбэ не подтверждают, мягко говоря, его позицию. Видимо не случайно ссылка с реальными тестами у него ведет в никуда, а выложены только результаты.
|
Держи тесты, фома неверующий. На моей версии хрома replaceHMTL обгоняет innerHTML совсем немного, но судя по графикам, прирост может быть в разы больше:
http://jsperf.com/innerhtml-vs-replacehtml
Если бы все было иначе, я бы не спорил.
Сообщение от newobject
|
Вот мои результаты:
ff:
replace: 125ms
inner: 47ms
chrome:
replace: 191.000ms
inner: 91.000ms
opera:
replace: 257.000ms
inner: 116.000ms
старая опера:
replace: 445ms (445010µsec)
inner: 250ms (250109µsec)
|
replaceHTML ведет себя лучше на ДЕЙСТВИТЕЛЬНО БОЛЬШИХ объемах текста (на самом деле, количество элементов важнее). У тебя же такая проблема?
<html>
<head>
<title>Untitled</title>
</head>
<body>
<div id="id"><div>
<script>
var str = Array(1000).join("fooooooooooooooooooovvvvvmvmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmddssmxmxmxmxm");
var strWithElems = Array(1000).join("fooooo<br/>oooooooo<br/>oooooovvvvvmvmmm<br/>mmmmmmmmmmmm<br/>mmmmmmmmmmmmm<br/>mmmmmmmmmmmmm<br/>mddssmxmxmxmxm");
var elem = document.getElementById("id");
test('innerHTML with simple text', function () {
elem.innerHTML = str;
}, 1000);
test('replaceHTML with simple text', function () {
elem = replaceHtml(elem, str);
}, 1000);
test('innerHTML with complex text', function () {
elem.innerHTML = strWithElems;
}, 1000);
test('replaceHTML with complex text', function () {
elem = replaceHtml(elem, strWithElems);
}, 1000);
function test(title, fn, i) {
console.time(title);
while (i--) { fn(); }
console.timeEnd(title);
}
function replaceHtml(el, html) {
var oldEl = typeof el === "string" ? document.getElementById(el) : el;
/*@cc_on // Pure innerHTML is slightly faster in IE
oldEl.innerHTML = html;
return oldEl;
@*/
var newEl = oldEl.cloneNode(false);
newEl.innerHTML = html;
oldEl.parentNode.replaceChild(newEl, oldEl);
/* Since we just removed the old element from the DOM, return a reference
to the new element, which can be used to restore variable references. */
return newEl;
};
</script>
</body>
</html>
Код:
|
innerHTML with simple text: 579.010ms
replaceHTML with simple text: 535.914ms
innerHTML with complex text: 9071.508ms
replaceHTML with complex text: 8032.101ms |
Как видишь, на больших объемах replaceHTML у меня немного быстрее. Судя по jsperf, в других браузерах innerHTML работает еще хуже.
Сообщение от newobject
|
По сабжу: новый код ничуть визуально не отличается от предыдущих версий: на V8 тормозит ввод. Что не удивительно: на других двигах ко времени ввода следующего символа цикл успевает закончится, а на тормозном V8 -- нет. Никакой магии
|
Откуда у тебя такое тайное знание?
Я свое (про innerHTML) почерпнул из профайлера, могу показать скрины.
И да, расскажи про машину, на которой все это выполняется. Нетбук какой-то? Какая версия Хрома? Я просто давно не видел, чтобы что-то js- ное тормозило.
Сообщение от newobject
|
ЗЫ и причем тут декларативный подход ЯННП?
|
«XSLT тормозное говно! Ничего не понятно! Зачем он нужен?», — обычно говорят люди, не разобравшись в подходе.