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我发现不是很合理,至少现在我这么觉得,但是对于页面有大量刷新和需要长时间运行这个需求来说,我觉得还是需要深入研究一下的。

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

相关文章

  • 小程序如何定位所在城市及发起周边搜索

    小程序如何定位所在城市及发起周边搜索

    这篇文章主要介绍了小程序如何定位所在城市及发起周边搜索,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 微信小程序图片选择区域裁剪实现方法

    微信小程序图片选择区域裁剪实现方法

    本篇文章主要介绍了微信小程序图片选择区域屏裁剪实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 微信小程序的开发范式BeautyWe.js入门详解

    微信小程序的开发范式BeautyWe.js入门详解

    这篇文章主要介绍了微信小程序的开发范式BeautyWe.js详解,它是一套专注于微信小程序的企业级开发范式,它的愿景是:让企业级的微信小程序项目中的代码,更加简单、漂亮,需要的朋友可以参考下
    2019-07-07
  • 在新窗口打开超链接的方法小结

    在新窗口打开超链接的方法小结

    有时候我们想让用户在新窗口打开网站,因为默认当前窗口打开,很多情况下,用户并不喜欢
    2013-04-04
  • 使用layui实现的左侧菜单栏以及动态操作tab项方法

    使用layui实现的左侧菜单栏以及动态操作tab项方法

    今天小编就为大家分享一篇使用layui实现的左侧菜单栏以及动态操作tab项方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JavaScript CSS 通用循环滚动条

    JavaScript CSS 通用循环滚动条

    核心是 position:relative;,才能让其内部的 ul 以绝对定位,通过改变 top 值实现向上移位置。
    2009-10-10
  • 两个JavaScript中的特殊值null和undefined详解

    两个JavaScript中的特殊值null和undefined详解

    Null和Undefined是JavaScript中非常基础和重要的概念,理解它们的含义、特点和使用方式对于避免出现错误和编写健壮的应用程序非常重要,这篇文章主要介绍了两个JavaScript中的特殊值null和undefined详解,需要的朋友可以参考下
    2023-06-06
  • javascript中clipboardData对象用法详解

    javascript中clipboardData对象用法详解

    这篇文章主要介绍了javascript中clipboardData对象用法,详细分析了clipboardData对象的功能及相关使用技巧,需要的朋友可以参考下
    2015-05-05
  • JavaScript实现异步提交表单数据

    JavaScript实现异步提交表单数据

    这篇文章主要为大家详细介绍了JavaScript实现异步提交表单数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • js本身的局限性 别让javascript做太多事

    js本身的局限性 别让javascript做太多事

    最近常有人在Q群里发问诸如"怎样让js操作文件"、"怎样让js实现多线程"等问题。
    2010-03-03

最新评论