const tpl = document.createElement('template');
tpl.innerHTML = `
<div>
<h1>Heading</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<button>Button</button>
</div>
`;
const el = tpl.content.firstElementChild
document.documentElement.appendChild(el.cloneNode());
const fragment = document.createDocumentFragment();
const el = document.createElement('div');
const heading = document.createElement('h1');
const para1 = document.createElement('p');
const para2 = document.createElement('p');
const button = document.createElement('button');
const headingText = document.createTextNode('Heading');
const para1Text = document.createTextNode('Paragraph 1');
const para2Text = document.createTextNode('Paragraph 2');
const buttonText = document.createTextNode('Button');
heading.appendChild(headingText);
para1.appendChild(para1Text);
para2.appendChild(para2Text);
button.appendChild(buttonText);
el.appendChild(heading);
el.appendChild(para1);
el.appendChild(para2);
el.appendChild(button);
fragment.appendChild(el);
document.documentElement.appendChild(fragment);
// const fragment = document.createDocumentFragment();
const el = document.createElement('div');
const heading = document.createElement('h1');
const para1 = document.createElement('p');
const para2 = document.createElement('p');
const button = document.createElement('button');
heading.innerText = 'Heading';
para1.innerText = 'Paragraph 1';
para2.innerText = 'Paragraph 2';
button.innerText = 'Button';
el.appendChild(heading);
el.appendChild(para1);
el.appendChild(para2);
el.appendChild(button);
// fragment.appendChild(el);
document.documentElement.appendChild(el);
// const fragment = document.createDocumentFragment();
const el = document.createElement('div');
const heading = document.createElement('h1');
const para1 = document.createElement('p');
const para2 = document.createElement('p');
const button = document.createElement('button');
const headingText = document.createTextNode('Heading');
const para1Text = document.createTextNode('Paragraph 1');
const para2Text = document.createTextNode('Paragraph 2');
const buttonText = document.createTextNode('Button');
heading.appendChild(headingText);
para1.appendChild(para1Text);
para2.appendChild(para2Text);
button.appendChild(buttonText);
el.appendChild(heading);
el.appendChild(para1);
el.appendChild(para2);
el.appendChild(button);
// fragment.appendChild(el);
document.documentElement.appendChild(el);
const fragment = document.createDocumentFragment();
const el = document.createElement('div');
const heading = document.createElement('h1');
const para1 = document.createElement('p');
const para2 = document.createElement('p');
const button = document.createElement('button');
heading.innerText = 'Heading';
para1.innerText = 'Paragraph 1';
para2.innerText = 'Paragraph 2';
button.innerText = 'Button';
el.appendChild(heading);
el.appendChild(para1);
el.appendChild(para2);
el.appendChild(button);
fragment.appendChild(el);
document.documentElement.appendChild(fragment);
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
template | |
DocumentFragment createTextNode | |
createElement | |
createElement createTextNode | |
DocumentFragment |
Test name | Executions per second |
---|---|
template | 88706.3 Ops/sec |
DocumentFragment createTextNode | 99746.1 Ops/sec |
createElement | 128111.0 Ops/sec |
createElement createTextNode | 128457.5 Ops/sec |
DocumentFragment | 62727.3 Ops/sec |
I'll break down the benchmark definition and explain what's being tested.
The benchmark is comparing three approaches to create a HTML structure:
innerHTML
property of a template
element to set its content, which is then cloned and appended to the document body.createTextNode
: This approach creates a DocumentFragment
, populates it with text nodes (using createTextNode
) and then appends the fragment to the document body.innerText
: This approach creates individual HTML elements (e.g., headings, paragraphs, buttons) using createElement
and sets their innerText
property instead of setting innerHTML.Now, let's discuss the pros and cons of each approach:
Template innerHTML
Pros:
Cons:
DocumentFragment with createTextNode
Pros:
Cons:
Element creation with innerText
Pros:
Cons:
Other considerations:
ExecutionsPerSecond
), which indicates the overhead of cloning or appending elements.As for the libraries used, none are explicitly mentioned in the provided benchmark definition. However, it's worth noting that createTextNode
is a method of the Document
interface, which is part of the DOM (Document Object Model).