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 相关文章推荐
!DOCTYPE声明对JavaScript的影响分析
Apr 12 Javascript
javascript获取隐藏dom的宽高 具体实现
Jul 14 Javascript
javascript引用赋值(地址传值)用法实例
Jan 13 Javascript
JavaScript取得WEB安全颜色列表的方法
Jul 14 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
Feb 17 Javascript
原生js实现瀑布流布局
Mar 08 Javascript
Js利用Canvas实现图片压缩功能
Sep 13 Javascript
AngularJS中的路由使用及实现代码
Oct 09 Javascript
jQuery轻量级表单模型验证插件
Oct 15 jQuery
Vue.js实现立体计算器
Feb 22 Javascript
JavaScript进阶(一)变量声明提升实例分析
May 09 Javascript
Vuex的各个模块封装的实现
Jun 05 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
单位速度在实战中的运用
2020/03/04 星际争霸
基于mysql的论坛(4)
2006/10/09 PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
js innerHTML 改变div内容的方法
2013/08/03 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
Python学习资料
2007/02/08 Python
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
python处理csv中的空值方法
2018/06/22 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
Python笔记之代理模式
2019/11/20 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
如何利用Python识别图片中的文字
2020/05/31 Python
工厂门卫岗位职责范本
2014/04/04 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年科研工作总结
2014/12/03 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
自我推荐信格式模板
2015/03/24 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android