2016-10-30 2 views
0

У меня есть карта google на моей веб-странице и используется geoxml3 для анализа слоев (со многими метками).Удалите старые слои geoxml3 при обновлении

Существует таймер, который будет запускать jquery каждые 10 секунд, чтобы вытащить новый .kml-файл. Однако я хочу удалить старый слой, прежде чем разбирать новый слой.

Вопрос: Каков правильный способ удаления/уничтожения?

Я знаю, что есть geoXml.hideDocument();, но что только скрывает слой, он не удаляет/не разрушает слой правильно? (Ниже это hideDocument() реализация)

refreshMap() - скрыть предыдущий слой и показать новый слой

$.ajax({ 
    url: url, 
    dataType: 'json', 
    type: 'get', 
    contentType: 'application/x-www-form-urlencoded', 
    data: "", 
    success: function (data, textStatus, jQxhr) { 
     if (data['success'] == 1) { 
      if (geoXml) 
       geoXml.hideDocument(); 
      var src = data['kml']; 
      geoXml = new geoXML3.parser({ 
       map: map, 
       suppressInfoWindows: false, 
       singleInfoWindow: true, 
       infoWindow: infowindow, 
       zoom : false 
      }); 
      geoXml.parse(src); 
      geoXml.showDocument(); 
     } 
    }, 
    error: function (jqXhr, textStatus, errorThrown) { 
     console.log(errorThrown); 
    } 
}); 

Несмотря на то, что это работает, но мое беспокойство, что, если она продолжает тянуть данные каждые 10 секунд, если страница открывается в течение 1 часа, это вызовет какое-либо отставание? Причина в том, что наложения фактически не уничтожены/удалены, они все еще находятся в памяти, просто мы теряем ссылку на нее (потому что теперь ссылаемся на новый слой).

Update

Я нашел некоторую информацию в Интернете, кажется, что я не придется беспокоиться об этой реализации.

«Так как JavaScript является сборщиком мусора, вам не нужно удалять сами объекты - они будут удалены, когда нет никакого способа ссылаться на них больше.»

ответ

0

У меня есть test case , который эффективно делает это:

filename="http://www.geocodezip.com/dynamicmarkerkml.php"; 
geoXml.parse(filename); 
setInterval("geoXml.hideDocument();geoXml.parse(filename)", 5000); 

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

Смежные вопросы