我们开发了一个使用Dojo开发的丰富的Web应用程序(使用许多不同的视图,大量的按钮,视图之间的事件等)。任何数据都通过Rest接口异步加载。IE8中由Dojo 1.7.2引起的内存泄漏
现在我们意识到,在Internet Explorer 8中,如果应用程序的URL在相同的选项卡/浏览器窗口中打开了两次或更多次脚本,并且很快会导致内存不足。
似乎Dojo不断开任何事件处理程序/ DOM节点。
我跟踪到一个简单的html页面,只有一个单独的Dojo按钮小部件,并用sIEve(IE8的内存泄漏分析器)分析了html页面。如果再次调用html页面,则某些DOM节点不会被释放(成为孤儿)。
是否有任何设置/技巧/模式来防止孤儿?
我认为这种行为会导致我们的Dojo应用程序的巨大占用空间,而离开应用程序URL时并不会释放它。
这是样本HTML页面:
<html>
<head>
<title>MemLeak Test</title>
<style>
@import "../themes/claro/claro.css";
</style>
<script
type="text/javascript"
data-dojo-config="'parseOnLoad':true"
src="../js/dojo-release/dojo/dojo.js"></script>
<script type="text/javascript">
require([ "dojo/parser" ]);
require([ "dijit/form/Button" ]);
</script>
</head>
<body class="claro">
<h1>Memory Leak?</h1>
<input
type="button"
dojoType="dijit.form.Button"
label="Button"></input>
</body>
在筛孔样本HTML文件两次后,它会报告已经18个孤立的项目: HEAD,SCRIPT,DIV,SPAN(重复不同的命令);全部只有1个Ref并标记为泄漏! (对不起,我不能发布任何截图)
Thx对于该主题的任何帮助。