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 相关文章推荐
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
Dec 06 Javascript
js prototype 格式化数字 By shawl.qiu
Apr 02 Javascript
JavaScript修改浏览器tab标题小技巧
Jan 06 Javascript
JavaScript检测鼠标移动方向的方法
May 22 Javascript
jquery实现全选、不选、反选的两种方法
Sep 06 Javascript
jQuery.parseHTML() 函数详解
Jan 09 Javascript
jQuery遍历节点方法汇总(推荐)
May 13 jQuery
详谈Node.js之操作文件系统
Aug 29 Javascript
微信小程序之选项卡的实现方法
Sep 29 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
Oct 27 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
Jan 22 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
Aug 31 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
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
详解vue添加删除元素的方法
2018/06/30 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
python中xrange用法分析
2015/04/15 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
Python探索之修改Python搜索路径
2017/10/25 Python
分分钟入门python语言
2018/03/20 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
区政府领导班子个人对照检查材料
2014/09/25 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
小学教师工作总结2015
2015/04/07 职场文书
刑事上诉状范文
2015/05/22 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
新闻稿标题
2015/07/18 职场文书
python实现批量移动文件
2021/04/05 Python
go 实现简易端口扫描的示例
2021/05/22 Golang