有什么方法可以找出 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 的窗口对象属性与您当前的窗口对象属性进行比较。这种方法的优点是您可以随时使用它,即使在您的应用程序启动后,您甚至可以定期运行它。