1.因为最近项目做的很多页面都和canvas绘制有关,但奈何我们的PC系统有点巨大,话不多说直接看图说话
- 好家伙直接1G起步,有时候这个页面在加载的地图文件多的情况可能会有2-3G,运存小的设备可能就被撑爆了,谷歌虽快,但是因为他是每个标签页单独搞了一个进程,所以内存并不共享,当你标签页开的很多或者标签页过大时轻则卡顿,重则页面直接崩溃。
- 插件市场也提供了一些插件比如The-Great-Suspender等,可以休眠不是正在使用的标签页,但是有时候对于单个标签页过大的情况却无能为力。回归到我们的这个项目,因为吃内存好几次需要我去排查,起初怀疑是内存泄漏,但是排查以后发现快照下的js堆栈空间并没有出现一段时间内激增的情况,后面继续排查,发现了很奇怪的问题:
- 首先大家肯定都知道咱们的js并不提供手动的GC,也就是垃圾回收,垃圾回收是每隔一段时间会执行一次,将不再使用的内存进行释放,至于垃圾回收,但是VUE中我发现如果频繁的V-if是会导致谷歌浏览器中的内存没办法及时被GC回收,然后导致页面崩溃的情况,可能我这是个例但是大家感兴趣可以去试试,
6. 我这个界面就是如上图所示,有多个tab实现每个tab是根据条件进行v-if出来的,单个tab中的格点图片和地图路线,前者是通过样式定位上去的,路线是使用canvas绘制的,canva地图比较大,一般大小在10000*10000左右,然后问题就出现了--->
7. 当我们以极快的速度重复不断来回点击切换时,页面的内存无法及时被GC,然后我们的页面就崩溃了,提示内存溢出了,不知道大家有没有遇到类似的问题,欢迎大家进行交流,如果有解决过类似问题的大佬,还望不吝赐教。