Remove All Children: removeChild vs. innerHTML vs. Range vs. innerText vs. textContent (http://jsbench.github.io/#b80fc169aa8c7b31c71604ac9e2a3aa6) #jsbench #jsperf
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"/> | |
<title>Remove All Children: removeChild vs. innerHTML vs. Range vs. innerText vs. textContent</title> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script> | |
<script src="./suite.js"></script> | |
</head> | |
<body> | |
<h1>Open the console to view the results</h1> | |
<h2><code>cmd + alt + j</code> or <code>ctrl + alt + j</code></h2> | |
</body> | |
</html> |
"use strict"; | |
(function (factory) { | |
if (typeof Benchmark !== "undefined") { | |
factory(Benchmark); | |
} else { | |
factory(require("benchmark")); | |
} | |
})(function (Benchmark) { | |
var suite = new Benchmark.Suite; | |
Benchmark.prototype.setup = function () { | |
function createFragment() { | |
var children = []; | |
var root = document.createElement('div'); | |
for (var i = 0; i < 100; i++) { | |
children[i] = document.createElement('div'); | |
root.appendChild(children[i]) | |
} | |
return {root: root, children: children}; | |
} | |
var rangeHelper = new Range(); | |
}; | |
suite.add("removeChild", function () { | |
/* removeChild */ | |
var data = createFragment(); | |
var root = data.root; | |
var children = data.children; | |
var idx = children.length; | |
while (idx--) { | |
root.removeChild(children[idx]); | |
} | |
}); | |
suite.add("innerHTML", function () { | |
/* innerHTML */ | |
var data = createFragment(); | |
data.root.innerHTML = ''; | |
}); | |
suite.add("Range", function () { | |
/* Range */ | |
var data = createFragment(); | |
rangeHelper.selectNodeContents(data.root); | |
rangeHelper.deleteContents(); | |
}); | |
suite.add("textContent", function () { | |
/* textContent */ | |
var data = createFragment(); | |
data.root.textContent = ''; | |
}); | |
suite.add("innerText", function () { | |
/* innerText */ | |
var data = createFragment(); | |
data.root.innerText = ''; | |
}); | |
suite.add("removeChild", function () { | |
/* removeChild */ | |
var data = createFragment(); | |
var root = data.root; | |
var node; | |
while (node = root.firstChild) { | |
root.removeChild(node); | |
} | |
}); | |
suite.on("cycle", function (evt) { | |
console.log(" - " + evt.target); | |
}); | |
suite.on("complete", function (evt) { | |
console.log(new Array(30).join("-")); | |
var results = evt.currentTarget.sort(function (a, b) { | |
return b.hz - a.hz; | |
}); | |
results.forEach(function (item) { | |
console.log((idx + 1) + ". " + item); | |
}); | |
}); | |
console.log("Remove All Children: removeChild vs. innerHTML vs. Range vs. innerText vs. textContent"); | |
console.log(new Array(30).join("-")); | |
suite.run(); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment