var simpleTemplate = document.createElement("template");
simpleTemplate.innerHTML = `<span class="simple"></span>`;
var complexTemplate = document.createElement("template");
complexTemplate.innerHTML =
`<span class="complex">
<span class="simple-1"></span>
<span class="simple-2">
<span class="simple-2-1"></span>
</span>
<span class="simple-3">
<span class="simple-3-1"></span>
</span>
<span class="simple-4"></span>
</span>`;
let el = document.createElement("div");
let content = complexTemplate.content.cloneNode(true);
content.querySelector('.complex').classList.add('newClass');
content.querySelector('.simple-4').setAttribute('data-test', 'sometestvalue');
content.querySelector('.simple-3').setAttribute('something', 'somevalue');
el.appendChild(content);
let el = document.createElement("span");
el.classList.add("complex");
el.classList.add("newClass");
let span1 = document.createElement("span");
span1.classList.add("simple-1");
let span2 = document.createElement("span");
span2.classList.add("simple-2");
let span21 = document.createElement("span");
span21.classList.add("simple-2-1");
span2.appendChild(span21);
let span3 = document.createElement("span");
span3.classList.add("simple-3");
span3.setAttribute('something', 'somevalue');
let span31 = document.createElement("span");
span31.classList.add("simple-31");
span3.appendChild(span31);
let span4 = document.createElement("span");
span4.classList.add("simple-4");
span4.setAttribute('data-test', 'sometestvalue');
el.append(span1, span2, span3, span4);
let el = document.createElement("div");
el.innerHTML = `<span class="complex newClass">
<span class="simple-1"></span>
<span class="simple-2">
<span class="simple-2-1"></span>
</span>
<span class="simple-3" something="somevalue">
<span class="simple-3-1"></span>
</span>
<span class="simple-4" data-test="sometestvalue"></span>
</span>`;
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
complex template | |
complex javascript | |
complex innerhtml |
Test name | Executions per second |
---|---|
complex template | 84341.8 Ops/sec |
complex javascript | 70347.0 Ops/sec |
complex innerhtml | 64815.8 Ops/sec |
Let's break down the benchmark and explain what is being tested.
Benchmark Definition
The benchmark measures the performance of creating DOM nodes in three different ways:
template
elements, specifically cloning the inner content of a template element.Options Compared
The benchmark compares these three approaches:
template
elementPros and Cons
Here's a brief summary of each approach:
Library Usage
None of the benchmark tests use external libraries.
Special JavaScript Features/Syntax
The benchmark does not explicitly mention any special JavaScript features or syntax. However, some approaches might require specific knowledge of template engine syntax (e.g., Mustache or Handlebars).
Other Alternatives
If these three approaches are not sufficient for your needs, you might consider:
Benchmark Results
The latest benchmark results show that the template approach is slightly faster than vanilla JavaScript, while innerHTML is slower. However, it's essential to note that these results might vary depending on your specific use case and environment.