Das Knockout ist langsam, wenn die Kontrollkästchen in einem großen (1000) Dataset deaktiviert werden

Ich verwende diesen Code, um alle Kontrollkästchen in meiner Ansicht zu aktivieren.

var checked = self.includeAllInSoundscript();
var contents = self.filterContents(self.getFilters());
for (var i = 0; i < contents.length; i++) {
   contents[i].includeInSoundscript(checked);
}
return true;

Das Kontrollkästchen

<input type="checkbox" data-bind="checked: includeInSoundscript" title="sometitle" />

Dies ist, was Inhalt ist:

(function (ko) {
ContentViewModel = function (data) {
    this.orderId = data.orderId;
    this.contentReferenceId = ko.observable(data.contentReferenceId);
    this.includeInSoundscript = ko.observable();
});

Dies sind die Filtermethoden:

self.getFilters = function() {
  var filterOrders = $.grep(self.orders(), function (order) {
    return (order.usedInfilter());
  });
  var filterLocations = $.grep(self.locations(), function (location)      {
    return (location.usedInfilter());
  });
  return { orders: filterOrders, locations: filterLocations };
};
self.filterContents = function (filter) {
  var filteredArray = self.contents();
  if (filter.orders.length > 0) {
      filteredArray = $.grep(filteredArray, function (content) {
        return $.grep(filter.orders, function (order) {
          return (order.orderId == content.orderId);
        }).length > 0;
      });
  }
  if (filter.locations.length > 0) {
      filteredArray = $.grep(filteredArray, function (content) {
                         return $.grep(filter.locations, function (location) {
                           return $.inArray(location.location, content.orderedFrom().split('/')) != -1;
  }).length > 0;
});
}
 return filteredArray;
};

Das Aktivieren aller Kontrollkästchen ist schnell, aber wenn ich das Kontrollkästchen deaktiviere, kann es bis zu 20 Sekunden dauern. Seltsamerweise dauert es, wenn das Ergebnis der Filterung klein ist, immer noch etwas länger, selbst wenn das gefilterte Ergebnis bei einer Gesamtmenge von 1000 etwa 40 beträgt.

Das Kontrollkästchen befindet sich in einer Tabelle, die mit data-bind = "foreach: contents" gebunden ist.

Ich habe jetzt einige der "unnötigen" Observablen entfernt, für Eigenschaften, die sich höchstwahrscheinlich nicht ändern, verhält es sich dann etwas besser, aber immer noch sehr langsam, insbesondere in Firefox. Die große Frage ist, warum dieses Verhalten nur beim Deaktivieren von Kontrollkästchen und nicht beim Filtern, Sortieren, Überprüfen usw. auftritt.

Hinweis: Das Deaktivieren der Kontrollkästchen ist nur möglich, wenn "angehakt" falsch ist, andernfalls ist es schnell.

Bearbeiten: Ich zeige nur 50 Elemente gleichzeitig an, aber ich überprüfe / deaktiviere alle gefilterten Elemente. Dadurch habe ich die Kontrolle darüber, was auf dem Server gepostet werden soll.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage