Клуб API Карт

Подвисание браузера (API 2)

s.dreval
14 июня 2012, 10:35

Суть в следующем, нужно каждые 5 сек отправлять на сервер запрос и полученный ответ в виде меток обновлять на карте. Это было реализованно в первой версии карт, работает без тормозов если объектов не более 100. Сейчас переписываю код под вторую версию, столкнулся с проблемой, когда меток даже 50, браузер на пару секунд виснет намертво

Алгоритм обновления меток следующий:

я создай геоколлекцию, добавил ее на карту.

далее каждые 5 сек я ее очищаю и затем наполняю в цикле.

 

    $.post('handler.ashx', { date: (new Date()).valueOf() }, function (response) {
        _this.CollectionObj.removeAll();
        eval(response);
        for (i in data) {
            if ((data[i].HideObj != '1') && (data[i].Longitude != '0') && (data[i].Latitude != '0')) {
                point = [data[i].Latitude, data[i].Longitude];
                placemark = new _this.ymaps.Placemark(point, {
                    iconContent: _this.HTMLTextMarker(1, 'img/PAS-GO.png', 21, 45),
                    hintContent: "Кораблик",
                    balloonContentHeader: 'Заголовок',
                    balloonContentBody: 'Содержимое <em>балуна</em>',
                    balloonContentFooter: 'Подвал',
                    balloonMaxWidth: 300
                }, {
                    iconLayout: "default#imageWithContent",
                    iconImageHref: "",
                    iconImageSize: [0, 0],
                    hideIconOnBalloonOpen: false
                });
                _this.CollectionObj.add(placemark);
            }
        }
    });

8 комментариев
Подписаться на комментарии к посту

не понял откуда берется data

и зачем нужен eval

 

если бы стояла задача обновлять данные каждые 5 секунд я бы использовал Server-Sent Events или чтото подобное, а то как-то пользователей жалко каждый раз постом ходить

я в ответ отправляю строку var data = [тут перечисление всех параметров];

Server-Sent Events не могу использовать, так как не поддерживается IE8, а мне нужно использовать только его в работе с картами, таковы условия.

кажется IE8 поддерживает XDomainRequest, который умеет работать по технологии server-push

так точно, переделал через него, но сути дела не поменяло, все равно нереальное поедание памяти, не может быть каких-либо замыканий при добавлении таким образом в коллекцию или еще чего?

А можно увидеть страницу с описанной проблемой?

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

Тогда попробуйте замерить время выполнения eval и время выполнения цикла создания/добавления меток.