jquery – IE6帧和内存泄漏

前端之家收集整理的这篇文章主要介绍了jquery – IE6帧和内存泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我开始这个问题之前,我明白每个方面都是错误的。请记住这一点…

我有一个CRM-ish内部网应用程序与2001年开发的集成软电话,我已经继承。它基本上是一个集合应用程序,将电话控制与基于Web的前端集成,用于帐户管理。 (Genesys电话和基于AS400的集合系统…使用MQSeries)

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

现在,输入问题:我们目前使用IE6,应用程序是使用框架构建的。从内存的角度看,jQuery库的实现已经暴露了应用程序的筛子性质。目前正在启动时消耗大约75Mb的内存,大约2-3个小时后就会增长到150Mb到300Mb之间。那么浏览器就会崩溃。

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

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

>我已经在IE9上测试了这个问题,但问题依然存在,但有一点
更受控制
>重新设计应用程序将需要大约$ 500k和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刷新。这清理了页面的内存。但是当一个单独的框架被重新加载时,内存从来不会清除…显然。并且我的用户必须看到的每个屏幕都重新加载到主框架中。

我不能简单地刷新框架集,因为在框架集中有一个软电话,如果它被刷新或注销不正确,将会带来Armageddon。

有没有人知道如何控制框架集内存而不刷新它?

解决方法

你没有发表任何代码来判断这一点,但是许多这些情况是由于不正确的使用闭包引起的。

阅读包括但不限于:

> JavaScript Closures and Memory Leaks
> Introducing the Closure
> Plugging Those Memory Holes

猜你在找的jQuery相关文章