Ошибка jQuery и Google Maps закрывает мой ноутбук! Ошибка памяти? - PullRequest
0 голосов
/ 25 августа 2011

У меня есть карта Google, работающая со скриптами (jQuery) и использующая маркеры и полигоны из множества веб-сервисов RESTful, развернутых на том же сервере. Кажется, что все работает нормально, но после нескольких минут запуска симуляции (просто перерисовывание оверлеев через n секунд с помощью функции setInterval) мой компьютер выключается! Я даже не получаю Синий экран смерти (BSoD), компьютер просто выключается!

Я понял, что это как-то связано с памятью (удаление других оверлейных кодов занимает больше времени). Я думаю, что освободил память, как вы можете видеть в этом фрагменте, но я не уверен. Чего мне не хватает?

function deleteOverlay(overl) {
    if (overl)
    {
        for (i in overl)
        {
            overl[i].setMap(null);
        }
        overl.length = 0;
        overl = [];
    }
}

function populate(map) {
    var infowindow = new google.maps.InfoWindow({content: ''});
    jQuery.get("/MyServiceRESTful/resources/passengers/", {}, function (data) {
        deleteOverlay(passengersArray);
        jQuery(data).find("passenger").each(function () {
            var marker = jQuery(this);
            var idtxt = marker.attr("id");
            var sntxt = marker.attr("snippet");
            var location = marker.attr("lat")+', '+marker.attr("lng");
            var latlng = new google.maps.LatLng(parseFloat(marker.attr("lat")),parseFloat(marker.attr("lng")));
            var marker = new google.maps.Marker({
                            position : latlng,
                            map : map,
                            title : marker.attr("id") + " [" + marker.attr("snippet") + "]",
                            animation : google.maps.Animation.NONE,
                            icon : passengermarker
                         });
            var contentString = 'Hi';
            google.maps.event.addListener(marker, 'mouseover', function () {
                infowindow.content = contentString;
                infowindow.open(map, marker);
            });
            passengersArray.push(marker);
        });
    });

    //More similar calls
}

1 Ответ

0 голосов
/ 25 августа 2011

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

Я бы посоветовал вам сделать эти обращения к серверу динамическими, то есть сделать это по запросу, а не загружать его по какой-либо причине. Если вы, как один человек, убиваете свой сервер, я могу не представляю, что произойдет, когда ваш сайт заработает .. В идеале сделайте так, чтобы по мере возможности прикреплять события к объектам вашей карты и запускать их только при необходимости.

Я надеюсь, что это правильный подход, который вы могли бы использовать, или, пожалуйста, обновите вопрос, чтобы показать нам больше кода и того, чего вы пытаетесь достичь.

...