gpt4 book ai didi

jquery - IE6 框架和内存泄漏

转载 作者:行者123 更新时间:2023-12-03 21:42:49 26 4
gpt4 key购买 nike

在开始这个问题之前,我知道它的各个方面都是错误的。请记住这一点...

我有一个 CRM 风格的 Intranet 应用程序,其中包含我继承的 2001 年开发的集成软电话。它基本上是一个集合应用程序,将电话控制与基于 Web 的前端集成以进行帐户管理。 (Genesys 电话和基于 AS400 的收款系统...使用 MQSeries)

在我称其为“生命终结”之前,我正在尽可能地使该应用程序现代化。作为我对其现代化尝试的一部分,我为我的 JS 功能和 UI 实现了 jQuery 和 jQuery UI。我不会为此疯狂,但它已经根深蒂固了。

现在,输入问题:我们当前使用 IE6,并且应用程序是使用框架构建的。 jQuery 库的实现从内存角度揭示了应用程序的类似筛子的性质。目前,它在启动时消耗大约 75Mb 的内存,并在大约 2-3 小时后增长到 150Mb - 300Mb。然后浏览器崩溃。

我已将内存泄漏的范围缩小到帧之间的串扰。我已经在 sIEve 和 Drip 中单独测试了这些页面,没有发现泄漏。但访问框架集中的页面,它就是一个定时炸弹。

我知道答案是重新设计没有框架的应用程序并开始使用更好的浏览器。这有两个问题:

  1. 我已经在 IE9 上对此进行了测试,问题仍然存在,但有一点更加可控

  2. 重新设计应用程序大约需要 50 万美元和 6-12 个月的时间。

有谁知道解决“帧泄漏”问题的方法吗?我知道我没有给出任何代码示例,但我只是在寻找常识。我在应用程序中的每个页面的 onload 和 onunload 处调用 IE CollectGarbage() 方法,但无济于事。我尝试在 jQuery 中调用 empty() 方法。我尝试将 document.body 元素的每个子元素设置为 null。什么都不起作用。

我不想取消所有这些更改,因为实际上已经实现了一些相当大的成本削减功能。

其他信息

我已经设法查明发生内存泄漏的场景。我认为这是帧之间的“串扰”,但似乎刷新单帧时会发生内存泄漏。

我设置了一个基本框架集,其中包含同一页面的 5 个实例(我非常确定每个 sIEve 都没有泄漏)。

<html>
<head>
<title>Frame Leak Test</title>
</head>
<frameset cols="*" rows="50%,50%" frameborder="1">
<frameset cols="33%,33%,34%" rows="100%">
<frame src="http://npasappgeneqa02/live/" />
<frame src="http://npasappgeneqa02/live/" />
<frame src="http://npasappgeneqa02/live/" />
</frameset>
<frameset cols="50%,50%" rows="100%">
<frame src="http://npasappgeneqa02/live/" />
<frame src="http://npasappgeneqa02/live/" />
</frameset>
</frameset>
</html>

正在加载的索引页显示 sIEve 中没有泄漏。

当我在 sIEve 中加载框架集页面并单击自动刷新时,没有报告内存泄漏。但是,如果我在单个框架上右键单击 -> 刷新,则 DOM 中 75% 的已加载项目将被列为泄漏。

显然,自动刷新相当于F5/shift+F5刷新。这会清理页面的内存。但是,当重新加载单个帧时,内存永远不会清除……显然。我的用户必须看到的每个屏幕都会重新加载到主框架中。

我不能简单地刷新框架集,因为框架集中有一个软件电话,如果刷新或注销不当,就会带来世界末日。

有谁知道一种方法来控制框架集内存而不刷新它?

最佳答案

您没有发布任何代码来判断这一点...但是许多这些场景都是由于闭包使用不当造成的。

阅读内容包括但不限于:

关于jquery - IE6 框架和内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9635859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com