Клуб API Карт

Почему у ObjectManager.remove квадратичная сложность?

thepioh
14 октября 2016, 20:36

Почему у ObjectManager.remove квадратичная сложность?

При удалении части меток, при работе с больше чем 5000объектов начинает все сильно тормозить. Подумал что можно решить проблему, если количество итоговых меток меньше чем нужно удалить, вызвав функцию removeAll и нарисовав все заного. Но у нее тоже квадратичная сложность от количества текущих меток.

_removeObjectWrappers: function (objects) {
  var result = [],
    found;
  for (var i = 0, l = this._objectWrappers.length; i < l; i++) {
    found = false;
    for (var j = 0, k = objects.length; j < k && !found; j++) {
      if (objects[j].id == this._objectWrappers[i].hash.id) {
        delete this._wrappersById[objects[j].id];
        found = true;
      }
    }
    if (!found) {
      result.push(this._objectWrappers[i]);
    }
  }
  this._objectWrappers = result;
}

removeAll: function () {
  var objects = this.getAll();
  this._objectsById = {};
  this._collectionComponent.removeAll();
  this.events.fire('objectsremove', new Event({
    type: 'objectsremove',
    target: this,
    objects: objects
  }));
  return this;
}

3 комментария
Подписаться на комментарии к посту
Спасибо за сообщение, мы посмотрим что тут можно ускорить
dimik,
Есть какие-то новости?
thepioh,
Тикет есть, как исправят и выложат, я отпишу