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


Posted in Javascript onOctober 16, 2020

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

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

Javascript 相关文章推荐
JS BASE64编码 window.atob(), window.btoa()
Mar 09 Javascript
javascript 静态对象和构造函数的使用和公私问题
Mar 02 Javascript
Javascript动画的实现原理浅析
Mar 02 Javascript
JavaScript更改字符串的大小写
May 07 Javascript
jquery中ajax处理跨域的三大方式
Jan 05 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
Mar 01 Javascript
jQuery中each遍历的三种方法实例分析
Sep 07 jQuery
JS复杂判断的更优雅写法代码详解
Nov 07 Javascript
Vue动态路由缓存不相互影响的解决办法
Feb 19 Javascript
vue点击按钮实现简单页面的切换
Sep 08 Javascript
JS创建或填充任意长度数组的小技巧汇总
Oct 24 Javascript
前端监听websocket消息并实时弹出(实例代码)
Nov 27 Javascript
JS pushlet XMLAdapter适配器用法案例解析
Oct 16 #Javascript
jQuery zTree如何改变指定节点文本样式
Oct 16 #jQuery
vue使用swiper实现左右滑动切换图片
Oct 16 #Javascript
详解webpack的clean-webpack-plugin插件报错
Oct 16 #Javascript
JS绘图Flot如何实现可选显示曲线图功能
Oct 16 #Javascript
JS跨浏览器解析XML应用过程详解
Oct 16 #Javascript
JS实现简易图片自动轮播
Oct 16 #Javascript
You might like
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
python轮询机制控制led实例
2020/05/03 Python
python excel多行合并的方法
2020/12/09 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android