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 Title、alt提示(Tips)实现源码解读
Dec 12 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
Oct 06 Javascript
浅谈JavaScript之事件绑定
Jul 08 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
Feb 26 Javascript
用JS写的一个Ajax库(实例代码)
Aug 06 Javascript
jQuery窗口拖动功能的实现代码
Feb 04 Javascript
JavaScript 中的 this 简单规则
Sep 19 Javascript
详解vue-cli中模拟数据的两种方法
Jul 03 Javascript
详解如何webpack使用DllPlugin
Sep 30 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
Oct 19 Javascript
express启用https使用小记
May 21 Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 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
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
PHP中的加密功能
2006/10/09 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
json对象转字符串如何实现
2012/12/02 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
pycharm安装及如何导入numpy
2020/04/03 Python
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
运动会广播稿100字
2014/01/11 职场文书
计算机个人求职信范例
2014/01/24 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
捐赠仪式主持词
2014/03/19 职场文书
社区消防工作实施方案
2014/03/21 职场文书
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python