卸载用getScript加载的文件?

Nic*_*ick 6 jquery

使用$ .getScript,我可以动态加载js文件.是否可以"卸载"其中一些文件?

我有一个基于ajax的管理面板.我有3个部分.单击每个部分时,我只想加载与之关联的文件.当切换到另一个部分时,我想卸载不必要的文件.

Nic*_*ver 11

如果真的有可能,"卸载" 在这里没有多大意义.让我们退后一步,看看你为什么加载所有文件开头:

  • 它们是另一个HTTP请求和X字节,如果你不需要它们,就不要得到它们
  • 它们有不想要的效果 - 你不希望脚本X在这里发生什么

现在从另一边看它,你已经加载了它们,这意味着上面已经发生过两次,你支付了获得它们的请求成本以及它们已经完成了什么.此外,什么影响他们的页面上一般不能被撤消.只需删除一个<script>不删除它声明的函数,它附加的事件处理程序等.

简而言之,你为什么要卸载?如果是为了消除这些影响,那么一个人不容易,不管怎么说都不是通用的.如果它是为了减轻页面...这里没有任何好处,你实际上只会产生删除元素的成本,而对于JavaScript方面的客户端没有任何好处.

  • @John - 哦,在这种情况下,你只是在寻找[`delete`](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete),如下所示:`delete myArray;`释放记忆. (3认同)
  • @Nick - 如果我想运行一些单元测试,其中一些需要我从服务器加载aditional html和js脚本,在完成一批测试后我想删除所有dom元素,objetcs,actions ...和我为该批测试下载的所有脚本. (2认同)

Iva*_*van 8

正如Nick Craver指出的那样,很难理解你为什么要这样做的原因.

但是,如果有正当理由这样做.我会把所有加载脚本的代码放在一个类中.当我想卸载它时,我只是将它分配给null.例如.

//external file:
o1=new Object();
o1.function1=function(){
     //blah blah blah
   };
o1.function2=function(){
     //blah blah blah
   };
o1.var1=1;

//and if when i'll need to get rid of all of this i can just
o1=null;
Run Code Online (Sandbox Code Playgroud)

  • @AresAvatar没有你不能.这是一个例子http://jsfiddle.net/v8T7L/1/ (2认同)

Eri*_*rik 7

我认为有正当理由加载和卸载脚本.我编写了一个监控工具,其中内容一直交换进出中心<div>.每个加载都需要将新函数附加到刚刚加载的内容上.如果您(un)加载特定于(未加载)内容的js,则内存占用量保持很小.并且您可以在编写通用xhtml时重复使用先前定义的函数名称以获得稍微不同的响应.

假设<div>包含有关数据和平的信息.用户想要编辑该特定记录,以便将<div>内容替换为在按钮,复选框等上具有各种行为的表单.表单被子目录并且<div>被原始内容替换但反映了更改.表格已经消失,因此需要任何相关的行为.

Imho加载到您的页面x.htm + x.css + x.js上的某个<div>,并在需要其他内容和行为时替换它们,而不是重新分析新内容并附加所有可能的响应,即使新内容中缺少某些节点或类.

而不是大型javascript文件,一组可插入的js模块使我的代码组织良好,并且ajax行为的维护相对容易.在jQuery中支持这样的方案对我来说是一个巨大的帮助.