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 相关文章推荐
<script defer> defer 是什么意思
May 10 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
Sep 02 Javascript
js+JQuery返回顶部功能如何实现
Dec 03 Javascript
jQuery网页选项卡插件rTabs用法实例分析
Aug 26 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
深入理解JS正则表达式---分组
Jul 18 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
Nov 29 Javascript
Vue.js第四天学习笔记
Dec 02 Javascript
easyUI combobox实现联动效果
Jan 17 Javascript
使用AngularJS2中的指令实现按钮的切换效果
Mar 27 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 Javascript
JavaScript逻辑运算符相关总结
Sep 04 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在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
Django自定义分页与bootstrap分页结合
2021/02/22 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
基于python生成器封装的协程类
2019/03/20 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
工作室成员个人发展规划范文
2014/01/24 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
治超工作实施方案
2014/05/04 职场文书
五四青年节演讲稿
2014/05/26 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
外国人来华邀请函
2015/01/31 职场文书
个人优缺点总结
2015/02/28 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书