Показать сообщение отдельно
  #11 (permalink)  
Старый 11.08.2014, 09:43
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Сообщение от 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 тормозное говно! Ничего не понятно! Зачем он нужен?», — обычно говорят люди, не разобравшись в подходе.
Ответить с цитированием