Это нормальная работа webkit - собирать все dom-операции вместе и применять за один раз, в конце потока выполнения (перед event-loop)
Делайте цикл чтения-вывода асинхронным, тогда все будет отрисовываться в процессе
const fs = require('fs');
function readAndDisplayFile(file, list) {
var stream = fs.createReadStream(file);
var buf = '';
stream.on('readable', () => {
var data = stream.read();
if(data === null) {
return;
}
buf += data.toString();
checkBufLines();
});
stream.on('end', () => {
buf += '\n';
checkBufLines();
});
function checkBufLines() {
var pos = buf.indexOf('\n');
if(pos === -1) {
return;
}
var line = buf.substr(0, pos);
buf = buf.substr(pos + 1);
var li = document.createElement('li');
li.innerText = line;
list.appendChild(li);
setImmediate(checkBufLines);
}
}
module.exports.readAndDisplayFile = readAndDisplayFile;
примерно как то так