Клуб API Карт

ymaps.ready и сторонние сервисы [решено, ymaps.ready => ?onload]

silentroach
27 июня 2014, 14:23

Всем привет.

 

Как вы знаете, сегодня лежит (на момент написания поста все еще лежит, да) http://yandexadexchange.net/. Что-то там с него пытается получить Яндекс.RTB. Лежит все это так, что запрос на сервис отваливается сам через примерно минуту по таймауту. Проблема в чем - ymaps.ready не срабатывает до того, как этот долгий запрос не закончится. Насколько я понимаю, Яндекс.Карты вешают обработчик события на load и успешно себе ожидают, когда же он закончится. Что мне кажется не очень правильным.

Кусочек из кода на тему :)

// проверяем довольно просто, кому нужны изыски пусть подключают jQuery

Версия API - 2.0-stable

15 комментариев
Подписаться на комментарии к посту
Всеволод Шмыров
27 июня 2014, 14:44
Добрый день. Могли бы вы скинуть страницу с ошибкой?

Здравствуйте

http://www.avito.ru/moskva/kvartiry - сверху "поиск объявлений на карте"

что-то починилось и все заработало :{

rtb что-то у себя подкрутили?

Угу, починили.

спасибо большое :)

мы перешли у себя на параметр onload

тем не менее готовы вернуться на православный ymaps.ready когда он будет поправлен :)

Если у вас очень долго генерируется dom, то использование onload вполне себе православное

Но у onload нет обработки ошибки инициализации, как у ymaps.ready, ну и появляется лишняя функция в глобальной области видимости. ymaps.ready аккуратнее в этом плане

Для инициализации карты обяазательно нужно, чтобы был готов дом-элемент для карты. Мы в апи не можем отследить, когда будет готов конкретный элемент, поэтому единственный гарантированный способ - ждать, когда будет готов весь dom целиком.

Если загрузка dom сложная поэтапная, то следить за готовностью контейнера карты должен вебмастер и запускать api через onload.

Мы готовы пересмотреть эти схемы, если вы предложите правильный вариант инициализации апи при долгой инициализации dom.

В ИЕ нельзя работать с элементом пока не закроются его родители. Те реди надо ждать практически всегда.

Лечиться решением проблемы долгой инициализацией dom. Лечиться легко, например через async скрипты - а больше что там тормозить то может?

Как вы успели заметить в оригинальном посте, Яндекс.РТБ что-то пытался загрузить с недееспособного хоста и откладывал этот самый onload на ~минуту.

Проблема - если АПИ был подключен после ready, но до load, он ждет load. Так как в этот момент нет "правильного" способа определить готовность. В том числе onload не сработает пока все ифреймы (с рекламой) не доделаются.

При условии, что "нажать" на кнопку можно только после навешивания события, которое будет по ready - тут "лучше" загружать через onload.

Хотя нет - у нас под кнопкой уже живая карта. Значит апи лучше загружать совсем сразу.

 

он же может быть не востребован, зачем его зря грузить?

Функцию, кстати, можно генерировать на лету. Как для jsonp колбэков. В том числе функция может быть куда-то вложена (как и экспортируемый символ)