Hi guys!
I'm also curious about this, I'm using Google Chrome and the favIcon flickers till all the entries are processed.
I've added the optimization Gunnar suggested and skimmed the code for other work directly with the observable array and updated to use the buffer instead, have a look:
self.getAllEntries = function () {
self.status("loading...");
ajaxHelper(nav_url, 'GET', { url: self.forumUrl() }).done(function (data) {
if (self.entries != null)
self.entries.removeAll();
if (data == null) {
self.error("Error: Forum 404'd!");
self.status("");
return;
}
var entries_buff = [];
for (var i = 0; i < data.length; i++) {
var item = data[i];
item.Nr = i + 1;
item.Message = message_mkUrlClickable(item.Message, item.Message, item, 0);
item.RefereeList = ko.observableArray();
entries_buff.push(item);
}
AddReferees(entries_buff);
self.entries(entries_buff);
AddRefereesPreview();
self.status("");
});
}
function AddReferees(entries_buff) {
for (var n = entries_buff.length - 1; n > -1; n--) {
var post = entries_buff[n];
if (post.ReferenceList == null || post.ReferenceList.length == 0)
continue;
for (var n2 = 0; n2 < post.ReferenceList.length; n2++)
AddReferenceToPost(post.ReferenceList[n2].Number, post.Number, entries_buff);
}
}
function AddReferenceToPost(referredTo_postNr, referee_postNr, entries_buff) {
for (var n = 0; n < entries_buff.length; n++) {
var post = entries_buff[n];
if (post.Number == referredTo_postNr) {
if (post.RefereeList().length == 0)
post.RefereeList.push(referee_postNr);
else if (post.RefereeList.indexOf(referee_postNr) == -1)
post.RefereeList.push(referee_postNr);
break;
}
}
}
Extra notes: Those entries that represent forum replies can have inner <ul> lists for videos and referees, just thought I'd mention this.