工作日志
在这里插入代码片上个星期终于把手头的工作忙完了,内网通过三次nginx反向代理终于可以把所有资源全部访问到了,包括阿里云服务器当中的资源。
不到上线,你永远不知道有多少坑,以为一切都正常了的时候,我开始了性能测试,前端测试的时候,发现iframe概率加载失败,作为一个认为一定是什么原因导致的,打开内存查看工具,占用内存168MB,电脑是8GB的,分配给IE浏览器的内存有2GB,足够用了。
但是出现一个问题,我发现点的次数多了,iframe会加载失败,果断进行内存日志,发现随着点击次数的增加,iframe的内存并没有被回收,也就是说,虽然iframe的页面进行了切换,但是上一个iframe加载页面内容的内存并没有被回收,随着点击次数的增加,iframe泄漏的内存达到一定内存,IE没有足够的内存进行渲染页面,继续点击,IE就会进入假死状态,如果继续点击,内存溢出,IE浏览器会直接崩溃,既然知道了原因,那就可以着手进行解决了。
首先翻看了IE官方的英文资料,上面是这么描述的,首先将要iframe的src置为空字符串,src="",然后调用frame.contentWindow.document.write(’’);//清空iframe的内容
frame.contentWindow.close();//避免iframe内存泄漏
frame.remove();//删除iframe
CollectGarbage();//这个方法为IE下独有,做内存释放之用
就可以进行内存回收了,暗自感叹,不愧是官方的说法,果然奏效了,就在我高兴的时候,天真的我,继续进行了内存测试,内存的增长速度确实下降了。但是,加速度大于0,速度永远在增长呀,也就是说,内存泄漏依然存在。
后来我发现,内存虽然回收了,可是只是回收了一部分,也就是,回收的代码没有执行完,系统已经进行的刷新页面,或者切换页面的操作了,经过研究,src="about:blank"效果会好非常多,内存增长的速度变的更慢了,但是依旧在增长!!!
最后的最后,使出了大招,在src="about:blank"后,调用settimeout函数延迟0.1秒调用以下代码,
frame.contentWindow.document.write(’’);//清空iframe的内容
frame.contentWindow.close();//避免iframe内存泄漏
frame.remove();//删除iframe
CollectGarbage();//这个方法为IE下独有,做内存释放之用
问题终于得到解决,内存终于趋于稳定。
心情不是 很好,博客更新的不是很及时,望请见谅,下一次更新,nginx实现高可用以及多台nginx的联合实现,以及nginx中使用扩展模块。
关于Iframe的内存的泄漏问题
最新推荐文章于 2023-06-20 20:30:40 发布