Vue实例挂载地图实例

355 阅读1分钟

问题说明

在我们使用Vue作为开发框架时,我们会习惯于将数据挂载到Vue示例上,方便监听数据以及销毁和调用。对于地图也是如此,我们希望将地图实例同样挂载到Vue实例(某一组件)上,地图数据量不大时,我们发现不了性能差异,但是当我们数据量变大,就会发现地图在拖拽时变卡,性能大大降低,该如何解决?

问题所在

造成这个原因的便是Vue的监听数据变化造成的,Vue实例与地图实例都有各自的监听事件,并且地图实例的属性(相机等)经常发生变化,每次变化都会触发Vue的监听数据的事件,导致性能降低。

尝试解决

  1. 不挂载,使用var或let进行定义成全局变量,这样确实会解决这个问题,但是又会造成另一个问题,当路由切换时,我们需要在beforedestory中主动调用地图销毁事件。更何况这么写并不美观。
  2. Object.freeze(),考虑过使用此方法解决监听问题,但是这样会导致地图实例无法变化,造成地图报错,此思路走不通。

最终解决

仍然走Vue挂载方式,但是这次挂载并不在data中声明,这样挂载的变量不会触发数据监听,也不会影响地图实例的性能。

欢迎来我的个人博客