function createElements(rootSelector,count){
var root=document.querySelector(rootSelector);
for ( var i=0; i< count; i++){
let button=document.createElement("button");
button.innerText=i+1;
button.style.padding="10px";
root.appendChild(button);
}
};
function normalBind(rootSelector){
var elements=document.querySelectorAll(rootSelector+" button");
//bind all buttons
for (let i=0; i<elements.length; i++){
elements[i].addEventListener("click",function(){
console.log("click in single element");
sp.end("standardClick");
});
}
};
function targetBind(rootSelector){
document.querySelector(rootSelector).addEventListener("click",function(e){
if (e.target.tagName=="BUTTON"){
sp.end("delegateClick");
console.log("click in single element by target");
}
});
};
createElements('#root',50000);
var sp=new Speeder();
sp.start("standard");
normalBind('#root');
sp.end("standard");
sp.start("delegate");
targetBind('#root');
sp.end("delegate");
sp.compare("standard","delegate");
sp.start("standardClick");
sp.start("delegateClick");
document.querySelectorAll("button")[1000].click();//trigger o 1000 button
sp.compare("standardClick","delegateClick");
<div id="root">
</div>
body {
direction: ltr;
}
#root{
display:flex;
flex-direction: row;
flex-wrap: wrap;
}
External resources loaded into this fiddle: