微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

dojo1.2 grid内存泄漏问题 以及 对话框的一个BUG

1)dojo 1.2 版本 Compat Grid内存泄漏问题

项目开发使用的是dojo 1.2,进入项目后期,发现IE(项目使用的是IE7)脚本内存泄漏严重,最终定位出是使用的widget--dojox.grid.compat.Grid存在内存泄漏,这个问题可以在起测试页面重现,用IE打开测试页/dojox/grid/compat/tests/test_grid.html,如果仅打开,反复刷新IE页面,这个时候是不会发生泄漏的,但是如果点击表格的单元格后刷新页面,就会发现IE内存不断上涨.这个问题困扰我很久,并且使用微软的IEJSLeaksDetecto工具也检测不出来(顺便说一句,这个工具的检测不是很准,千万不要迷信).当时抱着试试看的心理,在dojo的网站上写了一个BUG REPORT,老外会阴很及时,一个叫Dylan的工程师回信说dojo1.4解决了这个问题.这个消息让我很兴奋,可是当我下载下dojo1.4解包之后又很失望,原来1.4已废弃了dojox.grid.compat.Grid,虽然在Readme中说如果要使用这个widget可以解压目录中的一个压缩包,但是这个widget没有任何更新,问题依然存在.

无奈,只能研究源代码,一般解决IE内存泄漏的代码,都是写在对象销毁函数中,终于我发现了如下代码(还有一个注释,老外真是好心阿:))

将如上代码稍作修改,增加到1.2的代码中,上下文关系如下,则问题可以解决

2) 1.2版本对话框的问题

在我们的项目中存在如下场景,在打开一个对话框后,通过点击对话框的一个按钮,再打开一个对话框,发现第一个对话框中,TAB可以正常的切换界面元素,而第二个对话框中TAB见功能异常,记过定位发现是Dialog.js中绑定键盘事件的代码

this._modalconnects.push(dojo.connect(dojo.doc.documentElement,"onkeypress",this,"_onKey"));

这意味着,如果打开N个对话框,则document会被绑定N次onkeypress事件,所以修改

this._modalconnects.push(dojo.connect(this。domNode,"_onKey"));

解决

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐