Выбивание происходит медленно при снятии флажков в большом (1000) наборе данных

Я использую этот код, чтобы проверить все флажки в моем представлении.

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

Флажок

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

Вот что такое содержание:

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

Это методы фильтра:

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;
};

Проверка всех флажков выполняется быстро, но если снять флажок, это может занять до 20 секунд. Странно то, что если отфильтрованный результат небольшой, он все равно занимает немного больше времени, даже если отфильтрованные результаты составляют около 40 из общего набора 1000.

Флажок находится в таблице, связанной с использованием data-bind = "foreach: contents"

Теперь я удалил некоторые из «ненужных» наблюдаемых, поскольку свойства, которые, скорее всего, не изменятся, ведут себя немного лучше, но все еще очень медленно, особенно в Firefox. Большой вопрос заключается в том, почему это происходит только при снятии флажков, а не при фильтрации, сортировке, проверке и т. Д.

Обратите внимание: снятие флажков происходит только в том случае, когда «флажок» имеет значение «ложь», в противном случае он работает быстро.

Изменить: я показываю только 50 элементов одновременно, но я проверяю / снимаю флажок всех отфильтрованных элементов. Это, так что у меня есть контроль над тем, что публиковать на сервере.

Ответы на вопрос(2)

Ваш ответ на вопрос