Skip to content

Understand how inefficient for browsers to create DOM node

Daisho Komiyama edited this page May 4, 2022 · 1 revision

The DOM tree makes it easy for us to create, update, and delete nodes, however, the direct manipulation of that tree tends to be really slow when we have a large number of nodes.

Let’s write some code to find out how long it takes to update a DOM node compared to a simple string.

Paste the code below into a browser console window.

// ========= Updating String =========

let someString = "some string"

function updateString() {
  for (let i = 0; i <= 10000; i++) {
    someString = "update string"
  }
}

const t1 = performance.now()
updateString()
const t2 = performance.now()

console.log("It took " + (t2 - t1) + " milliseconds to update string");


// ========= Updating DOM =========

const newDiv = document.createElement("div")
const newText = document.createTextNode("some text")

newDiv.appendChild(newText)
document.body.appendChild(newDiv)

function updateDom() {
  for (let i = 0; i <= 10000; i++) {
    newDiv.innerHTML = "updated text"
  }
}

const t3 = performance.now()
updateDom()
const t4 = performance.now()

console.log("It took " + (t4 - t3) + " milliseconds to update a DOM");

The code above should print something like this.

It took 0.5 milliseconds to update the string
It took 66.69999998807907 milliseconds to update a DOM

Updating DOM takes 135 times longer than updating a string! This is why smart people have invented the virtual DOM.

Clone this wiki locally