А вот еще что можно оптимизировать. Создание новых нодов и потом appendChild - достаточно тяжелые операции. Гораздо легче создать строку, и потом вставить ее через innerHTML.
// Вместо
function createList(data) {
var list = document.createElement("ul");
for (var i = 0; i < data.length; i++) {
var newItem = document.createElement("li");
var newText = document.createTextNode(data[i]);
newItem.appendChild(newText);
list.appendChild(newItem);
}
return list;
}
// Делаем
function createList(data) {
var list = document.createElement("ul"),
cont = '',
i, l;
for (i = 0, l = data.length; i < l; i++) {
cont += '<li>' + data[i] + '</li>';
}
list.innerHTML = cont;
return list;
}