2009-10-22 69 views
1

我知道。可以将JavaScript和样式表文件动态加载到文档的标题中。另一方面,可以从文档的标题中删除脚本和样式表标签。但是,加载的JavaScript仍然在内存中。是否有可能销毁加载的JavaScript,包括函数和局部变量?

是否有可能从Web浏览器内存中销毁加载的JavaScript?我认为。它应该像下面的伪代码一样。

// Scan all variables in loaded JavaScript file. 
var loadedVariable = getLoadedVariable(JavaScriptFile); 

for(var variable in loadedVariable) 
{ 
    variable = null; 
} 

// Do same thing with function. 

是否有可能为这样做创建一些JavaScript?

感谢,

PS。现在,您可以使用xLazyLoader和jQuery来动态加载内容。

+0

你为什么认为你需要? – moonshadow 2009-10-22 09:03:28

+0

因为我想创建一些没有任何iframe的web应用程序。每一页都将通过Ajax加载。此外,JavaScript和样式表将根据页面要求加载。之后,引擎将销毁未使用的JavaScript和样式表,以减少函数,变量,JavaScript规则和样式表的重复名称。 – 2009-10-22 09:09:44

回答

3

如果加载脚本分配给window属性,例如与模块模式,像这样:

window.NiftyThing = (function() { 
    function doSomething() { ... } 
    return { 
     doSomething: doSomething 
    }; 
})(); 

window.NiftyThing = { 
    doSomething: function() { ... } 
}; 

NiftyThing = { 
    doSomething: function() { ... } 
}; 

然后你就可以删除引用它的属性:

delete window.NiftyThing; 

...至少删除那一个主要引用;如果有其他参考,它可能无法清理。

如果var关键字已经被使用:

var NiftyThing = { 
    doSomething: function() { ... } 
}; 

...那就不是一个属性,您不能使用delete,所以设置为undefinednull将打破参考:

NiftyThing = undefined; 

您可以对冲你的赌注:

NiftyThing = undefined; 
try { delete NiftyThing; } catch (e) { } 

在所有情况下,由JavaScript实现决定是否没有未加载的外部引用来加载脚本并进行清理,但至少您会给它一个机会。

如果按照Guffa的说法,加载的脚本不使用模块模式,那么您需要将这些规则应用于其所有符号。这是模块模式为Good Thing(tm)的另一个原因。;-)

+0

因此,我需要使用正则表达式来查找变量和函数的每种可能模式。对? – 2009-10-22 09:18:49

+0

如果你不知道你要卸货的是什么,我想你有很多工作要做。你不会知道它甚至会工作;脚本可以设置事件处理程序,它将保持引用。你最终可能会打破它(事件处理程序试图通过你已经删除的符号调用一个函数),而不是删除它。 – 2009-10-22 09:34:26

1

删除已加载的Javascript文件或许不可能取消代码所做的操作,即代码中的函数仍然定义。

您可以通过简单地用别的东西代替它删除功能定义:

myFunction = null; 

这不会删除这些标识符,但它不是一个功能了。

+0

我可以通过设置为未定义的值来删除它吗? – 2009-10-22 09:11:47

+0

@灵魂大师:是的,要么是未定义的,要么是null。 – 2009-10-22 09:32:42

相关问题