Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
el.innerHTML ... 742ms
diffhtml.innerHTML() ... 136ms
morphdom() ... 2023ms
el.innerHTML, morphdom() — средний результат, а diffhtml.innerHTML — хуже всего.import * as diffhtml from 'diffhtml';
// import morphdom from 'morphdom';
var rootEl = document.getElementById('root');
var tpl = `...`;
// console.profile("diffhtml.innerHTML()");
var fn = function () { return Math.ceil(Math.random()*1000); };
var start = window.performance.now();
for (var i=0,ln=1000; i<ln; i++) {
// str += tpl;
// V1 = innerHTML
// rootEl.innerHTML = tpl//tpl.replace(/\{rnd\}/ig, fn);
// V2 = diffhtml.innerHTML
diffhtml.innerHTML(rootEl, tpl);
// V3
// morphdom(rootEl, tpl);
}
// console.profileEnd();
console.log(Math.ceil(window.performance.now() - start));
var $temp = $('h1.title', document.body);
if($temp.length && $temp.html() =='Hello world!')
$temp.after('<p>Dear, World!</p>');
Если так, то, действительно, наличие условных инструментов модификации DOM постоянно требуется. Но как в DiffHTML напишется аппенд к любому содержимому (innerHTML) блока $temp? Наверное, надо вводить метасимволы типа "*" и дальнейшие правила разбора шаблона (второго параметра).В статье:
diffhtml 14-17
morphdom 11-17
mainstream:
(тут должен быть jquery)
vanilla-optimized 31-33
React 31-34
Backbone 25-27
Angular 28-31
Angular 2.0 Alpha 38-40
vuejs 35-36
ember 0-1 (нужен тест с последней версией, не верю)
Aurelia 33-36 ( http://jdanyow.github.io/aurelia-dbmonster/ )
hipsters:
riot 21-23
Elm 32-36
vidom 41-44
Monkberry 43-45
Inferno 40-43
frzr 40-42
моя поделка 40-43
вне конкурса:
canvas 60
Software:
Chrome 52.0.2743.116 m.
Windows 7 64bit
Hardware:
CPU : AMD A10-7850K (не самый плохой процессор https://www.cpubenchmark.net/high_end_cpus.html 5548 где-то сзади в high end)
GPU : AMD 7970 (не самая плохая видеокарта http://www.videocardbenchmark.net/high_end_gpus.html 5246 где-то top 42)
А теперь представьте как всё это будет тормозить на чём-то по-слабее
matreshka.js 26-28
Angular light 35-38
diffhtml ... 19-20
Angular ... 12-14
DiffHTML.js — утилита для патчинга DOM