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 相关文章推荐
围观tangram js库
Dec 28 Javascript
javascript 星级评分效果(手写)
Dec 24 Javascript
js购物车实现思路及代码(个人感觉不错)
Dec 23 Javascript
javascript模拟C#格式化字符串
Aug 26 Javascript
浅谈js基本数据类型和typeof
Aug 09 Javascript
禁用backspace网页回退功能的实现代码
Nov 15 Javascript
vue.js学习笔记:如何加载本地json文件
Jan 17 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
Feb 22 Javascript
关于JavaScript语句后面的分号问题
Dec 07 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
Oct 16 Javascript
js实现星星海特效的示例
Sep 28 Javascript
js实现缓动动画
Nov 25 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 smarty 二级分类代码和模版循环例子
2011/06/16 PHP
php object转数组示例
2014/01/15 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
浅析javascript中function 的 length 属性
2014/05/27 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
2018/05/09 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
[01:16:50]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第一场 3月7日
2021/03/11 DOTA
Python模拟三级菜单效果
2017/09/11 Python
python看某个模块的版本方法
2018/10/16 Python
flask-restful使用总结
2018/12/04 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
Python验证码截取识别代码实例
2020/05/16 Python
python定时截屏实现
2020/11/02 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
大型会议接待方案
2014/03/01 职场文书
教师党员承诺书
2014/03/25 职场文书
干部考核评语
2014/04/29 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
2016大学军训心得体会
2016/01/11 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技