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 相关文章推荐
javascript中有趣的反柯里化深入分析
Dec 05 Javascript
将Datatable转化成json发送前台实现思路
Sep 06 Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 Javascript
javascript实现自动填写表单实例简析
Dec 02 Javascript
js模式化窗口问题![window.dialogArguments]
Oct 30 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
快速搭建React的环境步骤详解
Nov 06 Javascript
JS匿名函数内部this指向问题详析
May 10 Javascript
JavaScript 预解析的4种实现方法解析
Sep 03 Javascript
详细分析Node.js 模块系统
Jun 28 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
Aug 10 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
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的预保留变量总结
2008/12/04 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
php session的锁和并发
2016/01/22 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
电子商务专业学生的学习自我评价
2013/10/27 职场文书
公司运动会策划方案
2014/05/25 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
初一军训感言
2015/08/01 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python