2016-10-30 7 views
0

ウェブページにGoogleマップがあり、geoxml3を使用してレイヤーを(多くの目印を付けて)解析します。更新時に古いgeoxml3レイヤーを削除します

新しい.kmlファイルを取得するために10秒ごとにjqueryをトリガーするタイマーがあります。しかし、新しいレイヤーを解析する前に、古いレイヤーを削除したい。

質問:削除/破棄の正しい方法は何ですか?

私はgeoXml.hideDocument();があることを知っていますが、レイヤーを隠すだけで、レイヤーを削除/破棄することはできません。 (以下hideDocument()の実装である)

refreshMap() - 前の層を非表示にし、これは動作しますが、私の心配は、それがデータごとに10を引っ張っ続けるならばということであっても、新たな層に

$.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); 
    } 
}); 

を表示ページが1時間開いている場合は、遅れが発生しますか?理由は、オーバーレイが実際には破壊/削除されていないため、それらはまだメモリ上にあり、単に参照を失うだけです(新しいレイヤを参照するため)。

更新

私は、オンラインでいくつかの情報を見つけた私は、この実装を心配する必要はありませんように、と思われます。

「Javascriptがガベージコレクトですので、あなたは オブジェクト自体を削除する必要はありません - もはやそれを参照してください に方法がないとき、彼らは削除されます。」

答えて

0

私はこれを効果的に行いtest case を持っている:

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

は、私が見ることができると私はそれが(ない最近、ある時点で)日間ランニング持っていたメモリリークが発生しません。

関連する問題