首页 > 其他 > 详细

vue + leaflet, marker 封装为 vue 模板后,地图不停刷新导致内存升高

时间:2019-11-12 17:11:44      阅读:225      评论:0      收藏:0      [点我收藏+]

本文地址: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~~~≥ω≤

 

 

 

 

vue + leaflet, marker 封装为 vue 模板后,地图不停刷新导致内存升高

原文:https://www.cnblogs.com/veinyin/p/11842886.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!