Это связано с однопоточностью браузеров. Рендеринг не начнется, пока поток не станет свободным. В этом случае это когда ваш цикл завершен и функция завершена. Единственный способ обойти это - (вроде) симулировать несколько потоков, используя таймеры, например:
var timer,
i = 0,
max = list.length;
timer = window.setInterval(function ()
{
if (i < max)
{
var obj = document.createElement("DIV");
obj.innerHTML = "<span class=\"itemId\">" + list[i].Id
+ "</span><!-- some more simple code --> ";
mainObj.appendChild(obj);
i++;
}
else
window.clearInterval(timer);
}, 1);
Очевидный недостаток заключается в том, что для завершения вашего цикла потребуется больше времени, поскольку он подходит для визуализации между каждой итерацией.