Dojo を使用してリッチ Web アプリケーションを開発しました (さまざまなビュー、多数のボタン、ビュー間のイベントなどを使用)。すべてのデータは、Rest インターフェースを介して非同期でロードされます。
Internet Explorer 8 では、アプリケーションのフットプリントが非常に大きく、アプリケーションへの URL が同じタブ/ブラウザー ウィンドウ内で 2 回以上開かれると、フットプリントが大きくなり、すぐにメモリ不足になることがわかりました。
Dojo はイベント ハンドラー/DOM ノードを切断していないようです。
これを追跡して、単一の Dojo ボタン ウィジェットのみを含む単純な html ページにたどり着き、sIEve (IE8 のメモリ リーク アナライザー) を使用してその html ページを分析しました。html ページが再度呼び出されると、一部の DOM ノードは解放されません (孤立します)。
孤児を防ぐための設定/トリック/パターンはありますか?
この動作が、アプリケーション URL を離れたときにリリースされない Dojo アプリケーションの巨大なフットプリントを引き起こしていると思います。
これは、サンプルの 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 ファイルを sIEve で 2 回開いた後、すでに 18 個の孤立した項目が報告されています。HEAD、SCRIPT、DIV、SPAN (異なる順序で繰り返されます)。すべて Ref が 1 つしかなく、リークとしてマークされています!; (すみません、スクリーンショットを投稿できません)
そのトピックに関するヘルプをありがとう。