Здравствуйте!
У нас есть карта, реализованная с использованием API Яндекс.Карт 2.1, есть база данных меток (25.000+).
Сейчас карта работает таким образом - при перетаскивании или изменении зума отсылает на сервер данные видимой области + несколько фильтров по свойствам, сервер возвращает метки для видимой области, но после длительной работы с картой когда подгружены уже почти все метки это начинало ощутимо тормозить + нагрузка на сервер постоянная.
Прочитал про objectManager, понял, что это как раз то, что мне нужно в данной ситуации. Сделал json-файл с базовыми свойствами меток (все остальное подгружается при клике на балун, ничего лишнего), для 25.000 меток сжатый файл весит всего 200кб. Загрузил его через objectManager на карту, все отработало моментально, радости нет предела, и тут я решил попробовать фильтр.
objectManager.setFilter('properties.t == 44');
При небольшом зуме, когда видно пару сотен меток, это заняло 4-5 секунд.
При полном отзуме на всю карту, браузер просто завис и выкинул предложение скрипт остановить.
Я очень расстроился, ведь этот функционал преподносится вами как решение для большого количества меток.
Может я что-то неправильно понял, не так применяю? Или вы планируете это оптимизировать в будущем? Вся проблема в том, что фильтр работает очень долго, даже на десятке тысяч меток, даже при фильтрации всего по одному свойству. И к нему даже коллбек не прицепить и событие не отловить чтобы сделать что-то вроде иконки загрузки, браузер просто висит пока идет фильтрация.
UPD:
Провел дальнейшие исследования, обнаружил, что проблема с производительностью видимо не в самом механизме фильтрации, а в механизме удаления большого количества геообьектов с карты.
Например такой код работает очень быстро:
objectManager = new ymaps.ObjectManager();
objectManager.add(json); // 25000 меток
objectManager.setFilter('properties.t == 44');
myDragMap.add(objectManager);
Особенность в том, что фильтрация происходит до добавления меток на карту, при таком раскладе все отрабатывает очень быстро. Однако, если пытаться фильтровать метки когда они уже добавлены, все начинает тормозить. Я попробовал перед фильтрацией уже добавленных меток просто удалять эти метки и добавлять заново с применением фильтра, пробовал удалять вообще objectManager с карты и добавлять заново, и в каждом случае получаю задержку такую же как при применении фильтра на уже существующих на карте метках, например все эти три способа тормозят одинаково:
myDragMap.remove(objectManager);
objectManager.removeAll();
objectManager.remove(json);
Отсюда я могу сделать вывод, что тормозит применение фильтра на уже размещенное на карте большое количество меток из-за самого механизма удаления меток с карты. Т.е. как добавлять метки на карту очень быстро вы сделали - а вот как удалять их так же быстро - такого решения нету.