Web ページに Google マップがあり、geoxml3 を使用してレイヤーを解析しています (多くの目印付き)。
新しい .kml ファイルをプルするために 10 秒ごとに jquery をトリガーするタイマーがあります。ただし、新しいレイヤーを解析する前に、古いレイヤーを削除したいと思います。
質問:削除/破棄する正しい方法は何ですか?
があることは知っていますが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 時間開かれると遅延が発生するのではないかと心配です。理由は、オーバーレイが実際には破棄/削除されていないためです。それらはまだメモリ上にあり、それへの参照を失っているだけです (現在、新しいレイヤーへの参照ポイントのため)。
アップデート
オンラインでいくつかの情報を見つけましたが、この実装について心配する必要はないようです。
「Javascript はガベージ コレクションであるため、オブジェクト自体を削除する必要はありません。オブジェクトを参照する方法がなくなった時点で削除されます。」