Profilowanie ładnie pokazało winowajcę:
https://screenshotscdn.firefoxusercontent.com/images/46e07e71-ec82-4289-8bf9-959547d3a2a4.png
Widać, że ponad 90% czasu spędzamy w addEventListener(). Dlaczego?
for (i=0;i<minus.length;i++){
if(minus[i])minus[i].addEventListener('click',erase);
if(allTic[i])allTic[i].addEventListener('click',ticAction);
if(edit[i])edit[i].addEventListener('click',redoMode);
if(addSubList[i])addSubList[i].addEventListener('click',subList);
if(arrow[i]) arrow[i].addEventListener('click',hideSubList);
if(subItem[i]) subItem[i].addEventListener('click',function(){addSubItem(this.previousSibling)});
if(inputSubList[i])inputSubList[i].addEventListener('keydown',function(e){
if(e.key=="Enter") addSubItem(this);
});
}
Ten kod wielokrotnie dodaje event listenery robiące to samo do tego samego elementu - przy każdym nowym todo event handler wywołuje się więcej razy, więcej razy dodaje ten sam event listener etc.