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 相关文章推荐
JavaScript中的变量声明早于赋值分析
Mar 01 Javascript
javascript类型转换使用方法
Feb 08 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
Feb 13 Javascript
Bootstrap3制作图片轮播效果
May 12 Javascript
20行JS代码实现粘贴板复制功能
Feb 06 Javascript
JS获取url参数,JS发送json格式的POST请求方法
Mar 29 Javascript
vue+webpack实现异步加载三种用法示例详解
Apr 24 Javascript
vue.js删除列表中的一行
Jun 30 Javascript
vue使用vuex实现首页导航切换不同路由的方法
May 08 Javascript
Vue组件间的通信pubsub-js实现步骤解析
Mar 11 Javascript
Vue表单提交点击事件只允许点击一次的实例
Oct 23 Javascript
element-ui中el-upload多文件一次性上传的实现
Dec 02 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
PHP自定义多进制的方法
2016/11/03 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python如何定义带参数的装饰器
2018/03/20 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
python3.5的包存放的具体路径
2020/08/16 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
自荐信的五个重要部分
2013/10/29 职场文书
会计求职信
2014/05/29 职场文书
同学聚会策划方案
2014/06/06 职场文书
典型事迹材料范文
2014/12/29 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫