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 = document.importNode(simpleTemplate,true);
el.appendChild(content);
let el = document.createElement("div");
let content = document.createElement("span")
content.classList.add("simple");
el.appendChild(content);
let el = document.createElement("div");
el.innerHTML = `<span class="simple"></span>`;
let el = document.createElement("div");
let content = complexTemplate.content.cloneNode(true);
el.appendChild(content);
let el = document.createElement("span");
el.classList.add("complex");
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");
let span31 = document.createElement("span");
span31.classList.add("simple-31");
span3.appendChild(span31);
let span4 = document.createElement("span");
span4.classList.add("simple-4");
el.append(span1, span2, span3, span4);
let el = document.createElement("div");
el.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>`;
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
Simple - Template | |
Simple - JavaScript | |
Simple - innerHTML | |
Complex - Template | |
Complex - JavaScript | |
Complex - innerHTML |
Test name | Executions per second |
---|---|
Simple - Template | 735748.1 Ops/sec |
Simple - JavaScript | 643094.9 Ops/sec |
Simple - innerHTML | 630207.8 Ops/sec |
Complex - Template | 195863.6 Ops/sec |
Complex - JavaScript | 112561.8 Ops/sec |
Complex - innerHTML | 166828.5 Ops/sec |
Let's break down the provided benchmark and explain what is being tested, compared, and their pros and cons.
Benchmark Overview
The benchmark measures the performance of creating DOM nodes using three different approaches:
template
element with innerHTML
innerHTML
to set the content of an existing elementEach approach is compared in two variations: simple and complex. The test cases are designed to simulate real-world scenarios, where simplicity might be preferred over complexity.
Approaches Compared
innerHTML
:template
element, setting its innerHTML
, and then importing the content into an existing element using document.importNode
.document.createElement
).innerHTML
:innerHTML
.Pros and Cons
innerHTML
:innerHTML
:Other Considerations
innerHTML
and DOM manipulation methods. Understanding the library's purpose and how it affects performance is essential.In conclusion, this benchmark provides a comprehensive comparison of three approaches for creating DOM nodes, highlighting their pros and cons. By understanding these factors, developers can make informed decisions about the best approach for their specific use cases.