HTML Preparation code:
x
 
1
<template id="component">
2
    <div id="header">
3
        <h3 id="title">{{ title }}</h3>
4
        <h4 id="sub-title">Written by life</h4>
5
    </div>
6
7
    <div id="body">
8
        <slot></slot>
9
        <button id="button">click me</button>
10
    </div>
11
</template>
12
13
<template id="content">
14
    <p>
15
        Lorem ipsum dolor sit amet, consectetur adipisicing elit.
16
        Amet aperiam corporis culpa deserunt dicta distinctio iste
17
        laboriosam laudantium modi, molestiae molestias necessitatibus
18
        neque nihil nisi omnis praesentium quam saepe totam ut velit.
19
        Adipisci architecto atque dignissimos doloremque dolores ex
20
        impedit in inventore nemo nulla repudiandae sequi veritatis
21
        voluptas voluptate, voluptatibus?
22
    </p>
23
</template>
24
25
<div id="wrapper" hidden></div>
Script Preparation code:
 
const fillTitle = shadow => {
    shadow.getElementById('title').textContent = 'Lorem ipsum dolor sit amet';
};
const attachEvents = shadow => {
    const button = shadow.getElementById('button');
    button.addEventListener('mousedown', () => {});
    button.addEventListener('mouseup', () => {});
    button.addEventListener('click', () => {});
    button.addEventListener('dragstart', () => {});
    button.addEventListener('dragend', () => {});
    button.addEventListener('dragcancel', () => {});
    button.addEventListener('dragmove', () => {});
    button.addEventListener('custom', () => {});
};
const renderWithHTML = shadow => {
    shadow.innerHTML = document.getElementById('component').innerHTML;
};
const renderWithClone = shadow => {
    shadow.appendChild(document.getElementById('component').content.cloneNode(true));
};
const wrapper = document.getElementById('wrapper');
const content = document.getElementById('content').innerHTML;
const examplesHTML = `<my-component-a>${ content }</my-component-a>`.repeat(5000);
const examplesClone = `<my-component-b>${ content }</my-component-b>`.repeat(5000);
class MyComponent extends HTMLElement {
    render() {};
    constructor() {
        super();
        const shadow = this.attachShadow({
            mode: 'open'
        });
        this.render(shadow);
        fillTitle(shadow);
        attachEvents(shadow);
    }
}
class MyComponentA extends MyComponent {
    render(shadow) {
      return renderWithHTML(shadow);
    };
}
class MyComponentB extends MyComponent {
    render(shadow) {
      return renderWithClone(shadow);
    };
}
window.customElements.get('my-component-a') || customElements.define('my-component-a', MyComponentA);
window.customElements.get('my-component-b') || customElements.define('my-component-b', MyComponentB);
window.renderTestHTMLString = () => wrapper.innerHTML = examplesHTML;
window.renderTestCloneNode = () => wrapper.innerHTML = examplesClone;
Tests:
  • HTML string

     
    renderTestHTMLString();
  • Clone node

     
    renderTestCloneNode();
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    HTML string
    Clone node

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 4 months ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Chrome 131 on Windows
View result in a separate tab
Test name Executions per second
HTML string 10.3 Ops/sec
Clone node 3.2 Ops/sec