DWR内存兼容及无法调用问题解决方案

 更新时间:2020年10月16日 15:28:44   作者:cuisuqiang  
这篇文章主要介绍了DWR内存兼容及无法调用问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在上次遇到DWR内存泄漏问题后根据网上的内容对JS文件进行修改,修改后发现还有一些兼容的问题,同时还出现不能调用的一些情况。

而且根据统计DWR就算内存泄漏,也不是特别严重,除非你一个浏览器跑几天不关闭,而且实时刷新!

经过再次查询,得知IE浏览器有自己的一个垃圾回收的函数:CollectGarbage();

CollectGarbage,是IE的一个特有属性,用于释放内存的使用方法嘛应该是,将该变量或引用对象,设置为null或delete

然后在进行释放动作在做CollectGarbage前,要必需清楚的两个必备条件:

引用

- 一个对象在其生存的上下文环境之外,即会失效。

- 一个全局的对象在没有被执用(引用)的情况下,即会失效。

对于对象何时失效,有这样的一些解释:

function testObject() {
var _obj1 = new Object();
}

function testObject2() {
var _obj2 = new Object();
return _obj2;
}

// 示例1
testObject();

// 示例2
testObject2()

// 示例3
var obj3 = testObject2();
obj3 = null;

// 示例4
var obj4 = testObject2();
var arr = [obj4];
obj3 = null;
arr = [];

在这四个示例中:

- “示例1”在函数testObject()中构造了_obj1,但是在函数退出时,它就已经离开了函数的上下文环境,因此_obj1失效了;

- “示例2”中,testObject2()中也构造了一个对象_obj2并传出,因此对象有了“函数外”的上下文环境(和生存周期),然而由于函数
的返回值没有被其它变量“持有”,因此_obj2也立即失效了;

- “示例3”中,testObject2()构造的_obj2被外部的变量obj3持用了,这时,直到“obj3=null”这行代码生效时,_obj2才会因为引用关系消失而失效。

- 与示例3相同的原因,“示例4”中的_obj2会在“arr=[]”这行代码之后才会失效。

另外我发现许多人都说了这样一句话:

最后之最后,关于GC的一个补充说明:在IE窗体被最小化时,IE将会主动调用一次CollectGarbage()函数。这使得IE窗口在最小化之后,内存占用会有明显改善。

我只能说,调用CollectGarbage()函数会有意外的收获,但是他不是万能的,也不是调用就能释放内存更不是说调用后和将浏览器最小化一次的效果一样。

我们是每秒五次刷新,每次刷新点有一百多处,这样浏览器的DOM始终是在增加和更新东西。算下来,就是跑一个小时也是有很大消耗的。

更何况我们的软件要跑在一个定制的机器上,发现这个机器的硬件有兼容问题,我们将浏览器更新到IE7.0,进行数据实时刷新后发现,内存一直增长,直到浏览器崩溃。但是不同机器崩溃的时机不同。

我在每次更新后调用垃圾回收函数,发现浏览器的内存仍在增加,但是间隔的有增有加,虽然总体还是在增加。由此,我们在那个机器上跑了十几个小时,浏览器内存没有超过50M。

很少有那个页面会这样大量的刷新,并跑这么长时间吧,可是我们遇到了。

把问题归咎与DWR我发现不是很合理,至少现在我这么觉得,但是对于页面有大量刷新和需要长时间运行这个需求来说,我觉得还是需要深入研究一下的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Bootstrap 组件之按钮(二)

    Bootstrap 组件之按钮(二)

    Bootstrap是Twitter推出的一个用于前端开发的开源工具包。本文给大家介绍Bootstrap 组件之按钮的相关知识,感兴趣的朋友一起学习吧
    2016-05-05
  • 解决webpack多页面内存溢出的方法示例

    解决webpack多页面内存溢出的方法示例

    这篇文章主要介绍了解决webpack多页面内存溢出的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 微信小程序canvas开发水果老虎机的思路详解

    微信小程序canvas开发水果老虎机的思路详解

    这篇文章主要介绍了微信小程序canvas开发水果老虎机的思路,本文通过思路代码分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • js unicode 编码解析关于数据转换为中文的两种方法

    js unicode 编码解析关于数据转换为中文的两种方法

    这篇文章主要介绍了js unicode 编码解析关于数据转换为中文的两种方法,需要的朋友可以参考下
    2014-04-04
  • 关于预加载InstantClick的问题解决方法

    关于预加载InstantClick的问题解决方法

    本篇文章主要介绍了关于预加载InstantClick的问题解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Bootstrap源码解读按钮(5)

    Bootstrap源码解读按钮(5)

    这篇文章主要源码解读了Bootstrap按钮,介绍了Bootstrap各式各样的按钮,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JS中Promise函数then的奥秘探究

    JS中Promise函数then的奥秘探究

    then()方法用于指定当前实例状态发生改变时的回调函数。它返回一个新的Promise实例。下面这篇文章主要给大家介绍了关于JS中Promise函数then的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-07-07
  • JavaScript中判断为整数的多种方式及保留两位小数的方法

    JavaScript中判断为整数的多种方式及保留两位小数的方法

    这篇文章主要介绍了JavaScript中判断为整数的多种方式,以及保留两位小数的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • axios使用拦截器统一处理所有的http请求的方法

    axios使用拦截器统一处理所有的http请求的方法

    这篇文章主要介绍了axios使用拦截器统一处理所有的http请求的方法,通过一段实例代码给大家介绍了axios拦截器使用,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • 如何为你的JavaScript代码日志着色详解

    如何为你的JavaScript代码日志着色详解

    这篇文章主要给大家介绍了关于如何为你的JavaScript代码日志进行着色的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JavaScript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04

最新评论