Клуб API Карт

Тормозит отрисовка меток через Remote(Loading)ObjectManager.

easy-money5
12 февраля 2015, 14:00

  Выполняется потайлова (splitRequests: true;) загрузка данных через Remote(Loading)ObjectManager с асинхронным отображением меток (syncOverlayInit: false;).

  После получения ответов на запросы данных, метки начинают отрисовываться только через 20-30 сек. (бывает и больше). Выполняется около 40 запросов за < 4 сек., при этом, передается около 530 точек.

  Также складывается впечатление, что несмотря на "syncOverlayInit: false" метки отрисовываются сразу все: в мониторе сети можно видеть, как выполнился запрос, но меток на карте нет, а потом через 20-30 сек. отображаются все разом.

  Тестирование проводилось и с включением локального кэша, тогда все запросы выполняются за 110 мс, но ситуация та же.

  Повторяется под Firefox 35.0.1 и Chrome 40.0.2214.111 m.

15 комментариев
Подписаться на комментарии к посту
Добрый день. Могли бы вы дать ссылку на страницу с проблемой?

 Тестирую локально.

 В какой-то момент отрисовка начала работать в соответствии с получением ответов, но все-равно рисовалось все сразу: после получения ответа на последний запрос. Сейчас опять как описано выше.

Вы уверены, что запрос поступает на клиент, а все это время обрабатывается сервером? Можете попробовать включить кластеризацию меток. Если проблема в отрисовке, то это должно ускорить работу. Если нет, то тогда дело в формировании ответа сервером

 Ну как бы писал, что смотрю через монитор сети (в браузере), плюс, см. выше про включение локального кэша: тоже самое, хотя к серверу уже никто не обращается.

 Ответ пришел, динамически создались script'ы, могу посмотреть его содержание, а на карте пусто, потом через 20-30 сек. метки появляются.

  Данные группируются (кластеризуются) по своему на сервере, поэтому локальная кластеризаци не поможет (не подходит по задаче).

Очень сложно проанализировать проблему только по словестному описанию. ВЫ можете сократить кол-во точек?

  Искусственно ограничил кол-во точек до 120, но особенных изменений не произошло.

  Проблему можно посмотреть тут: ссылку убрал.

Посмотрел ссылку. Судя по всему проблема в опции paddingTemplate. Это JSONP callback, которые вызывается на клиенте. Сейчас он указан одинаковым для всех. То есть при каждом следующем запросе перетирается, что и приводит к таким странным последствиям.
https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/RemoteObjectManager-docpage/#param-options.paddingTemplate
Попробуйте убрать опцию или задать уникальное значение, как показано в документации.

  Пробовал еще до публикации темы, попробовал еще раз (совсем убирал  paddingTemplate или добавлял еще "_%x_%y"): тоже самое.

  Вы можете тоже попробовать.

Некоторые файлы не отдают контент - http://95.85.47.250/YMapAPI20Test/map_obj_data_source.php?layer=4&z=9&x=301&y=172&callback=map_obj_data_callback

И с одинаковыми падингами правильно работать не будет.

Попробуйте для начала включить склейку тайлов, чтобы на сервер приходит только один запрос.

Меньше запросов - проще искать слабое звено.

  Про paddingTemplate, см. выше.

  Отсутствие контента обусловлено ограничениям на область вывода (только СНГ и, на всякий случай, просьба удалить ссылку.).

  Склейка тайлов это изменение постановки задачи: дело ж не в кол-ве запросов, а в том как они обрабатываются.

 

 

Склейка поставновку задачи не меняет. Она просто укрупняет блоки.

Суть в том что вы, посредством jsonp, те json+callback должны передать какой-то блок данных с сервера на клиент.

Или не передать, но сообщить об этом. Посредством вызова _уникального_ колбэка.

Итого две ошибки - кривой неуникальный padding, и пустые ответы.

Если не хотите кормить АПИ данными - просто возвращайте "коборку с ничего".

  Вы читали ответ выше?

  Уникальный paddingTemplate не решает проблемы, а пустые ответы к вопросу не имеют отношения (выберите в качестве области просмотра Украину).

Я все читал. Но попробуйте всетаки переключить АПИ в mode=debug и всегда "сервером" отвечать на запрос клиента.

Не потому что я злой полицейский, а потому что это правила игры. Запрос - ответ.

В вашем случае - много запросов, один дублирующийся ответ, и в случае с киевом - один пустой.

Как узнать что именно в этом ошибка:

1. Тамаут появления меток - 30 секунд ровно. Именно это время висит в исходниках jsonp модуля, и генерирует сообщение "прости не загрузил"

2. Скрипты остаются висеть в head страницы. Хотя после вызова колбэка должны удаляться. Но не могут, потому что дублируются

Уникальное "имя" скрипта jsonp - его колбэк. УНИКАЛЬНОЕ.

И ДОЛЖНО быть вызвано. Можно без данных, но должно.

 

Может всетаки попробуете сделать то, что от вас система ждет?

 Проблема оказалась именно в пустом ответе. От уникальности имени callback-функции она не зависит.

  Кстати, если бы изменили постановку задачи, проблему не нашли б, поскольку ответ для большей области был бы непустым.

 Всем спасибо за помощь!

Есть беда, что даже для пустых тайлов нужно вызывать колбек с пустым содержимым. Знаем про эту проблему, починим в будущих релизах.