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功能函数代码
Jun 23 Javascript
Extjs4 类的定义和扩展实例
Jun 28 Javascript
深入理解JS中的变量及作用域、undefined与null
Mar 04 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
Mar 04 Javascript
js与applet相互调用的方法
Jun 22 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
Feb 05 Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 Javascript
微信小程序实现打开内置地图功能【附源码下载】
Dec 07 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
Jan 25 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
Nov 20 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
May 10 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
May 20 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
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
载入进度条 效果
2006/07/08 Javascript
Javascript & DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
Python中index()和seek()的用法(详解)
2017/04/27 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
python 实现批量图片识别并翻译
2020/11/02 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
酒店实习个人鉴定
2013/12/07 职场文书
公司拓展活动方案
2014/02/13 职场文书
书香校园活动方案
2014/02/28 职场文书
小学庆六一活动方案
2014/02/28 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
聚美优品励志广告词
2014/03/14 职场文书
超市促销活动总结
2014/07/01 职场文书
调研报告的主要写法
2019/04/18 职场文书
详解JVM系列之内存模型
2021/06/10 Javascript
Kubernetes控制节点的部署
2022/04/01 Servers