Ich versuche, eine Vue.js-Anwendung zu erstellen, die viele Leaflet-Karten enth?lt.
Die folgende jsfiddle ist ein Beispiel für die Anwendung, die ich zu erstellen versuche:
https://jsfiddle.net/RayLa/vr2b6ad7/126/
Die spezifischen Kartenkomponenten sind wie folgt:
const MapComponent = { template: '<div id="map">About</div>', mounted(){ let map = L.map('map').setView([51.505, -0.09], 8); L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map); fetch("https://raw.githubusercontent.com/martinjc/UK-GeoJSON/master/json/administrative/gb/lad.json") .then((response) => response.json()) .then((data) => { L.geoJSON(data).addTo(map); }) } };
Die Anwendung enth?lt zwei Seiten, eine ?Home“-Seite und eine ?Karten“-Seite. Die Seite ?Karten“ enth?lt Prospektkarten. Die App sieht so aus:
Das Problem besteht darin, dass beim Navigieren von der Kartenseite zur Startseite und wieder zurück scheinbar ein massiver Speicherverlust vorliegt. In den Chrome-Entwicklertools wird auf der Registerkarte ?Speicher“ unten die von der Anwendung beim Start verwendete Speichermenge angezeigt (73,8 MB):
Wenn ich mehrmals von der ?Home“-Seite zur ?Karte“-Seite klicke, ist die von der Anwendung verwendete Speichermenge wie folgt (739 MB):
Wenn ich st?ndig zwischen den beiden Seiten klicke, stürzt die App aufgrund von Speichermangel irgendwann ab. Ich kann die Ursache des Speicherverlusts nicht herausfinden.
Wie entlade ich eine Komponente, sodass alle zugeh?rigen Daten aus dem Speicher gel?scht werden?
Wei? jemand, wie man dieses Problem l?st? Ich bin mir nicht sicher, ob das mit Leaflet.js für Vue.js zu tun hat.
我不是 vue 專家,但我很確定問題是你沒有正確銷毀傳單地圖。您必須調用 map.remove()
(https://leafletjs .com/reference.html#map-remove),否則保存地圖的 DOM 節(jié)點將保留在內存中,即使您的組件早已消失。
一旦您導航回主頁,vue 路由器就會銷毀您的 MapComponent
,并且您可以使用 destroyed
生命周期掛鉤來刪除它的傳單地圖。請參閱此小提琴: https://jsfiddle.net/wuo15b4L/