Подтвердить что ты не робот

Google Maps JS v3 - отдельное дерево DOM - утечка памяти?

У меня есть следующая проблема. Я удаляю все ссылки на экземпляр карты Google, включая маркеры, с помощью опции setMap(null) с помощью следующего кода:

destroyMaps = function () {
    leftMap = null;
    window.map = null;
    geocoder = null;
    for (var i=0; i<window.rightMarkers.length; i++) {
        window.rightMarkers[i].setMap(null);
        window.rightMarkers[i] = null;
    }
    window.rightMarkers = null;
    $("#map-canvas-right").remove();

    for (var i=0; i<window.leftMarkers.length; i++) {
        window.leftMarkers[i].setMap(null);
        window.leftMarkers[i] = null;
    }
    window.leftMarkers = null;
    $("#map-canvas-left").remove();

}

Единственное, что ссылается на leftMap или window.map во всем моем коде:

Для window.map

var marker = new google.maps.Marker({
                    position: myLatlng,
                    map: window.map,
                    icon: window.pins[keyword_category.category_name],
                    shadow: window.pins["Shadow"],

                    title:job.job_title
});
marker.job_type =  keyword_category.category_name;
window.rightMarkers.push(marker);

Для leftMap

var marker = new google.maps.Marker({
                position: myLatlng,
                map: leftMap,
                icon: window.pins[keyword_category.category_name],
                shadow: window.pins["Shadow"],

                title:job.job_title
 });
 window.leftMarkers.push(marker);

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

enter image description here

(Щелкните правой кнопкой мыши - откройте картинку, чтобы увидеть ее в полном размере)

Что я могу сделать, чтобы узнать, что вызывает утечку DOM?

4b9b3361

Ответ 1

Это известная проблема в Google Maps API v3 - даже чистое создание и уничтожение объекта google.maps (без создания маркера) приводит к утечке памяти. См. Проблема 3803: Ошибка: уничтожение экземпляра карты Google никогда не освобождает память.

Они воспроизводят проблему, создавая простой цикл, который создает и уничтожает объект google.maps. См

http://jsfiddle.net/KWf4r/

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

Проблема не устранена, и, похоже, не существует официального способа обхода проблемы. Конечно, есть способ, но это не просто обходное решение, которое, по-видимому, может перестать работать в следующем выпуске карт Google, ссылаясь на обсуждение:

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