グローバル スコープ (ウィンドウ) で Web アプリケーションによって宣言/挿入されたすべての変数を見つける方法はありますか? ボディのアンロード時にウィンドウからこれらの宣言されたものをすべて削除して、タブが閉じられたときにタブが使用したメモリを解放するようにします。
そうする理由: Firefox は、すべてのタブのグローバル ヒープを維持します。したがって、タブを閉じてもメモリは要求されません。
グローバル スコープ (ウィンドウ) で Web アプリケーションによって宣言/挿入されたすべての変数を見つける方法はありますか? ボディのアンロード時にウィンドウからこれらの宣言されたものをすべて削除して、タブが閉じられたときにタブが使用したメモリを解放するようにします。
そうする理由: Firefox は、すべてのタブのグローバル ヒープを維持します。したがって、タブを閉じてもメモリは要求されません。
そうする理由: Firefox は、すべてのタブのグローバル ヒープを維持します。したがって、タブを閉じてもメモリは要求されません。
そのための引用を提供できますか?Firefox は、関連するメモリをある時点で解放すると確信しています。そうしないと、すぐにメモリを大量に消費してしまいます。
実際に尋ねた質問への回答:window
アプリケーションをロードする前に、プロパティ名のリストを作成できます。
var name;
var names = [];
for (name in window) {
names.push(name);
}
...そして最後にそのリストにないものをすべて削除します:
for (name in window) {
if (names.indexOf(name) === -1) {
window[name] = undefined; // See below for why not `delete`
}
}
ほとんどの場合、プロパティを実際に削除することはできないことに注意してください (たとえば、delete window.foo;
ほとんどの場合は機能しません)。なぜなら、A) プロパティが で作成された場合var
は削除できず、B) ほとんどのバージョンのIE では、 のプロパティは許可されませdelete
んwindow
。しかし、それらに割り当てることができundefined
ます。
または、配列ではなく、オブジェクトを使用すると、後でプロパティ名を確認するのが簡単になる場合があります。
var name;
var names = {};
for (name in window) {
names[name] = 1;
}
次に、チェックは次のようになります。
for (name in window) {
if (!names.hasOwnProperty(name)) {
window[name] = undefined; // See above for why not `delete`
}
}
また、さまざまなアプローチについては、このスレッドを確認してください: ユーザー定義のグローバル変数の検出と報告
言及する価値のある注目すべきトリックは、iframe を作成し、iframe のウィンドウ オブジェクトのプロパティを現在のウィンドウ オブジェクトのプロパティと比較することです。このアプローチの利点は、いつでも使用できることです。アプリケーションが起動した後でも、定期的に実行することもできます。