有一个复杂的客户端模板系统,其中资源通过XHR(作为字符串)加载,然后注入DOM。
对于Javascript插入到现在为止,我们动态创建脚本标记并将它们附加到DOM,不仅是为了提高现代浏览器的速度,还因为这样可以在不再需要模板时清理/删除脚本。
然而 - 似乎在旧浏览器和IE(甚至是最新的10版本)中,特别是window.eval()在评估代码方面要快得多,而不仅仅是通过新标签注入 - 比如快10倍。甚至IE-native execScript也比eval慢很多。
我尝试优化它以使用eval来提高IE中的性能,但是之后我没有看到任何方法来引用或删除这样评估的Javascript。如果有人对如何解决这个问题有任何想法 - 会很感激。
答案 0 :(得分:3)
对于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;
...前提是它没有提供不清理的引用(例如设置事件处理程序或其他闭包)。