Vue组件中大对象缓存导致内存飙升,如何有效优化?
我在开发图片预览功能时,用数组缓存了500+张base64图片,发现内存持续飙升到200MB以上。尝试在组件卸载时清空数组并赋值null,但任务管理器显示内存占用没降下来,这是为什么?
代码结构大概是这样的:
export default {
data() {
return {
imageCache: [] // 存储base64字符串的数组
}
},
methods: {
preloadImages() {
// 通过循环将图片转为base64后push到imageCache
}
},
beforeUnmount() {
this.imageCache.length = 0
this.imageCache = null // 这样处理好像没用?
}
}
换过用Map和对象存储也一样,甚至尝试用setTimeout延迟释放,但Chrome内存分析里这些大字符串还是在Heap中。是不是大对象有特殊回收机制?该怎么正确处理这种情况?
优化思路有两个方向,一个是减少数据量,另一个是手动干预缓存。拿去改改:
重点是控制缓存的数量,别一股脑全塞进去。另外用
URL.revokeObjectURL可以手动释放资源,虽然不一定每次都有效,但比干等GC强。如果还是不行,考虑直接存图片路径,按需加载,别把所有图片都转成base64。Base64本身就比原始二进制大30%左右,500张图爆内存很正常。
记得主动调用
releaseMemory清理资源就行了。