如何卸载windows.eval()加载并解释的Javascript
How to unload windows.eval() loaded and interpreted Javascript?
有一个复杂的客户端模板系统,其中资源通过XHR加载(作为字符串),然后注入DOM。
到目前为止,对于Javascript插入,我们一直在动态创建脚本标记并将其附加到DOM中,这不仅是为了在现代浏览器中提高速度,而且因为这使得在不再需要模板时可以清理/删除脚本。
然而,在旧的浏览器和IE(甚至是最新的10版本)中,尤其是window.eval()在评估代码时要比通过新标签注入代码快得多,比如快10倍。即使是IE本机execScript也比eval慢很多。
我会尝试优化它,以便在IE中使用eval来提高性能,但我看不出有任何方法可以在之后引用或/或删除这样评估过的Javascript。如果有人对此有任何想法,我们将不胜感激。
到目前为止,对于Javascript插入,我们一直在动态创建脚本标记并将其附加到DOM中,这不仅是为了在现代浏览器中提高速度,而且因为这使得在不再需要模板时可以清理/删除脚本。
我想你可能误解了什么。删除script
元素并不会将其包含的脚本从加载到的JavaScript上下文中删除:http://jsbin.com/ujirat
然而,在旧的浏览器和IE(甚至是最新的10版本)中,特别是window.eval()在评估代码时要比通过新标签注入代码快得多,比如10倍的速度。。。然而,我看不出有任何方法可以在之后引用或/或删除这样评估过的Javascript。
它与通过script
标记加载的脚本完全相同:"卸载"它的唯一方法是删除对它的所有引用,这使它有资格进行垃圾收集。最好的方法是让脚本定义一个单个全局符号,该符号包含该脚本的所有功能,例如:
var foo = (function () {
var f = {};
f.foo = function() { ... };
f.bar = function() { ... };
return f;
})();
然后你可以通过以下操作"卸载":
foo = undefined;
前提是它不提供对自己的引用,而这些引用不会被清除(例如设置事件处理程序或其他闭包)。
- Appcelerator Titanium:在运行时下载并解释JavaScript代码
- 解释javascript中的+var和-var一元运算符
- 需要解释Javascript regex请求参数解析
- 解释 JavaScript 中数字的行为
- 请解释Javascript图像旋转代码
- 有人可以向我解释javascript getCookie()中while循环的功能吗?
- 有人可以帮助解释JavaScript中的这个正则表达式吗?
- Mozilla不能很好地解释JavaScript
- 任何人都可以解释JavaScript中的reduce函数吗?
- 解释JavaScript和php代码
- 一些帮助解释javascript函数
- 您将如何向初学者解释Javascript中的回调函数
- 有人能用一个真实的例子来解释JavaScript中函数和方法的区别吗
- 解释JavaScript中的变量作用域
- 解释JavaScript安全扫描警告
- 用Rhino在Java中解释JavaScript:暂停/恢复脚本
- 通过分解成更小的部分来解释javascript正则表达式
- 解释Javascript文件Laravel中的变量
- 需要解释javascript中的作用域问题
- 它“安全”吗?使用注释来解释Javascript中的函数