亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

使用 Leaflet.js + Vue.js 在頁面之間導(dǎo)航 - 記憶體洩漏問題已解決
P粉649990273
P粉649990273 2024-01-08 13:39:55
0
1
782

我正在嘗試製作一個包含許多 Leaflet 地圖的 Vue.js 應(yīng)用程式。

以下 jsfiddle 是我嘗試建立的應(yīng)用程式的範例:

https://jsfiddle.net/RayLa/vr2b6ad7/126/

具體地圖元件部分如下所示:

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

該應(yīng)用程式包含兩個頁面,一個「主頁」頁面和一個「地圖」頁面。 「地圖」頁麵包含傳單地圖。該應(yīng)用程式如下所示:

問題是當我從「地圖」頁面導(dǎo)航到「主頁」頁面並再次返回時,似乎存在大量記憶體洩漏。從 Chrome 開發(fā)者工具的「記憶體」標籤下,應(yīng)用程式在啟動時使用的記憶體量如下所示(73.8MB):

當我從「主頁」頁面點擊多次到「地圖」頁面時,應(yīng)用程式使用的記憶體量如下所示(739MB):

如果我繼續(xù)在兩個頁面之間單擊,應(yīng)用程式最終會因為記憶體不足而崩潰。 我似乎無法找出內(nèi)存洩漏的原因。

如何卸載元件以便從記憶體中清除所有相關(guān)資料?

有誰知道如何解決這個問題嗎?我不確定這是否與 Leaflet.js 的 Vue.js 有關(guān)。

P粉649990273
P粉649990273

全部回覆(1)
P粉340264283

我不是 vue 專家,但我很確定問題是你沒有正確銷毀傳單地圖。您必須呼叫map.remove() (https://leafletjs .com/reference.html#map-remove),否則儲存地圖的DOM 節(jié)點將保留在記憶體中,即使您的組件早已消失。

一旦您導(dǎo)航回主頁,vue 路由器就會銷毀您的 MapComponent,並且您可以使用 destroyed 生命週期掛鉤來刪除它的傳單地圖。請參閱此小提琴: https://jsfiddle.net/wuo15b4L/

#
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板