Javascript 在全局闭包中存储对DOM对象的引用是否效率很低?
假设我有一个给定的全球生命终结Javascript 在全局闭包中存储对DOM对象的引用是否效率很低?,javascript,jquery,Javascript,Jquery,假设我有一个给定的全球生命终结 var foo = function(){ var x; function doStuffToX(){ ... } return { doStuff: doStuffToX } }(); 其中x是对DOM元素的引用 考虑到这些DOM引用中有30多个,并且很少调用foo.doStuff(),下面哪种方法更有效?请注意,这将是一个单页应用程序,因此不会清除内存 在foo.x 在doStuff()s闭包中查询#x 在调用函数
var foo = function(){
var x;
function doStuffToX(){
...
}
return { doStuff: doStuffToX }
}();
其中x是对DOM元素的引用
考虑到这些DOM引用中有30多个,并且很少调用foo.doStuff()
,下面哪种方法更有效?请注意,这将是一个单页应用程序,因此不会清除内存
foo.x
doStuff()
s闭包中查询#x
在调用函数的情况下,1的速度效率更高,2的内存效率更高。与其过于担心这些微优化,只需编写代码,然后如果发现性能问题,就开始对代码进行剖析,看看需要改进的地方。在性能和内存使用方面,要考虑的另一个问题是出错的风险。如果您在执行代码之前启动选择器,您将面临使用过时引用的风险-即,您选择一个元素,然后修改包含该元素的html,这实际上会创建一个具有相同属性的全新元素,但您的旧引用现在链接到不存在的元素,而不再是页面上的内容。缓存选择器时要小心,这并不总是值得的。
$(function(){
foo.init();
foo.doStuff();
});
var foo = function(){
var x;
function init(){
x = $('#x');
}
function doStuffToX(){
...
x.modifyDom();
...
}
return { init: init, doStuff: doStuffToX }
}();
$(function(){
foo.doStuff();
});
var foo = function(){
function doStuffToX(){
...
var x = $('#x');
x.modifyDom();
...
}
return { doStuff: doStuffToX }
}();