导航时发生 Javascript 内存泄漏

Posted

技术标签:

【中文标题】导航时发生 Javascript 内存泄漏【英文标题】:Javascript memory leak when navigating 【发布时间】:2014-12-11 10:38:04 【问题描述】:

当我在 web 应用程序的网页之间导航时进行持续时间测试时,我遇到了巨大的内存增加。

这不是一个单页应用程序,所以我正在导航:

window.location.href = "linkToOtherPage.html";

这应该清除所有使用的内存吧?我在 Chrome 中注意到的是,然后 type=renderer 进程(Chrome 中的选项卡)声称内存过多。每 2 秒导航一次时,它会在一夜之间吃掉 1000MB。 (从 30MB 开始)。

分析js堆会产生4-5MB的大小,所以不在JS-heap中。 是不是让 JS/DOM 引起的内存泄漏会一直持续到你关闭浏览器?我原以为当您导航到另一个页面时它会被清除。

【问题讨论】:

您的网页上有什么?图片?闪光物体?视频?当您每 2 秒在夜间导航一次时,您只是在两个页面之间切换还是访问了数百个不同的页面?是否涉及浏览器插件? 两页,它只包含几个按钮,一些文字在这里和那里,1/2 非常小的图像。它将从 page1.html 到 page2.html,从 page2.html 到 page1.html。 那么,你是怎么解决这个问题的? 【参考方案1】:

我不太了解情况,但也许这很有用:

window.location.href 实际上是从缓存中加载页面,如果您一遍又一遍地引用同一个页面,并且如果音频 src 将通过 ajax 请求更改,那么您可能会将所有数据保存到缓存?! window.location.reload(true) 实际上可以再次从服务器获取数据。

我不确定我是否以任何方式帮助过你。但如果没有,抱歉让您失望了! ;D

【讨论】:

window.location.reload 只会重新加载页面,对吗?我还使用了window.location.replace("linkToOtherPage.html"),它不会将它添加到历史列表中,但没有成功。

以上是关于导航时发生 Javascript 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

javaScript中的内存泄漏?

导航页面时是不是所有 UWP 应用都会泄漏内存?

在IOS中使用web服务时发生NSURLSession内存泄漏

打开 UIPickerController 并关闭它时发生内存泄漏

Blazor University (42)JavaScript 互操作 —— 生命周期和内存泄漏

JavaScript内存管理闭包和内存泄漏