I experimented with performance and have two contributions that I hope can be useful.
My experiments focus on DOM manipulation time. Therefore, before going into this, it is definitely worth following the points above about entering JS into an array before creating an observable array, etc.
But if the DOM manipulation time is still bothering you, this might help:
1: a template to wrap the boot fairing around slow rendering and then hide it using afterRender
http://jsfiddle.net/HBYyL/1/
This is actually not a problem for the performance problem, but shows that a delay is probably inevitable if you loop over a thousand elements and use a template in which you can make sure that you have a load counter before the long KO operation, then hide him afterwards. Thus, it improves UX, at least.
Make sure you can load the counter:
Hide counter:
<div data-bind="template: {afterRender: hide}">
which causes:
hide = function() { $("#spinner").hide() }
2: Using html binding as a hack
I remembered the old technique from the moment when I worked on the console with Opera, creating a user interface using DOM manipulation. This was terribly slow, so the solution was to store large chunks of HTML as strings and load the strings by setting the innerHTML property.
Something similar can be achieved with an html binding and a computed one that outputs the HTML for the table as a large piece of text and then applies it at a time. This fixes the performance issue, but a huge drawback is that it severely limits what you can do with the binding inside each row of the table.
Here's a script that shows this approach, along with a function that can be called from within the rows of a table to remove an element with an undefined KO-like way. Obviously, this is not as good as the right KO, but if you really need powerful (ish) performance, this is a possible workaround.
http://jsfiddle.net/9ZF3g/5/