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 01 Javascript
filemanage功能中用到的lib.js
Apr 08 Javascript
js模拟弹出效果代码修正版
Aug 07 Javascript
推荐10 款 SVG 动画的 JavaScript 库
Mar 24 Javascript
原生js与jQuery实现简单的tab切换特效对比
Jul 30 Javascript
jQuery实现获取table表格第一列值的方法
Mar 01 Javascript
bootstrap switch开关组件使用方法详解
Aug 22 Javascript
Angular2 http jsonp的实例详解
Aug 31 Javascript
微信小程序实现刷脸登录
May 25 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
May 07 Javascript
JS中超越现实的匿名函数用法实例分析
Jun 21 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
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
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
python操作日期和时间的方法
2014/03/11 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
python修改字典键(key)的方法
2019/08/05 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
如何通过jdbc调用存储过程
2012/04/19 面试题
兼职学生的自我评价
2013/11/24 职场文书
代收款委托书范本
2014/10/01 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python