vue + leaflet, marker 封裝為 vue 模板后,地圖不停刷新導致內存升高


本文地址:https://www.cnblogs.com/veinyin/p/11842886.html

 

上半年做了一個地圖,有多種點,為了便於管理 marker 及對應的 popup、tooltip,將以上內容封成了 vue 模板

 

先介紹一個實現方案:

基於 vue2-leaflet 的 LGeoJson,封裝了自己的 GeoLayer,用於實現點、線、面

在 LGeoJson 的 options 里,onEachFeature 中生成對應的 marker,官方提供了 JSX 方式,如下

 

可以發現就是在 render 中 return 一個 vue 模板, 那么我們可以在 GeoLayer 的 props 中定義 renderMarker,接收生成點的方法

renderMarker 在使用 GeoLayer 的頁面中定義,return一個

只需要在使用 GeoLayer 的地方,傳入一個 renderMarker 方法,renderMarker返回相應的 marker 模板,替換掉上圖 return 里的內容

 

出現問題:

頁面保持打開,大約半天時間就會崩潰,查看內存發現內存一直在增長,此處補充一下地圖上的點位需要5分鍾刷新一次

測試反饋后定位問題,確定就是 renderMarker 這個方法造成的

將 vue 模板換成 HTML 模板,手動不斷刷新,發現內存會回收,進一步定位發現 marker 模板一直沒有被銷毀

 

解決問題:

既然是 vue 模板未被銷毀,最快的解決方案就是換成 HTML 模板

因為 popup 和 tooltip 是點擊時生成的,因此不用修改

 

PS:使用 vue 模板副作用

new Vue 生成的模板,無法通過 this 訪問 vuex 獲取數據,可通過傳參獲取

 

 

 

END~~~≥ω≤

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM