vue项目,场景是使用百度地图,为了方便,我会将很多的地图对象的marker实例(点),label实例(文字),polygon实例(面)等覆盖物的实例存储都data字段内,但这会导致堆内存暴增,经过一次实例的计算,堆内存大概增加230+MB(手动刷新,存在一定几率的第一次刷新堆内存不回收),两个疑问,
1.这大量的堆内存暴增是否跟vue data的原理有关系?比如这些实例不可避免的有getter、setter。有没有办法规避掉,比如放在data内,但让vue不监听这个数据,类似这种操作。
2.数据量如果巨大,我要是放在.vue文件的script标签内会有什么明显缺点嘛?应该不算是全局变量。
你可以把你不需要监听的数据
Object.freeze
一下再放data字段里,vue 会跳过监听这些对象,可以节省很多性能。地图实例这些的话最好不要放 data 里,如你所言会有不可避免的 getter/setter,但
Object.freeze
也可能会导致对实例本身的一些操作失效。数据放 script 标签还是 data 对象里,取决于你模板代码是否直接引用了这些数据,引用了就放 data 对象里。