Javascript 一次又一次地使用同一查询选择器是否会造成性能损失?
在一个文档中搜索同一查询选择器的性能成本加起来是否相当大,或者管道中的某些代码(来自正在使用的JavaScript库(例如jquery)或JavaScript引擎或浏览器引擎)是否缓存了查询选择器Javascript 一次又一次地使用同一查询选择器是否会造成性能损失?,javascript,jquery,garbage-collection,javascript-engine,Javascript,Jquery,Garbage Collection,Javascript Engine,在一个文档中搜索同一查询选择器的性能成本加起来是否相当大,或者管道中的某些代码(来自正在使用的JavaScript库(例如jquery)或JavaScript引擎或浏览器引擎)是否缓存了查询选择器 $(document).ready(function() { var foo = $("#foo"); doThis(); doThat(); thenDoThat(); ... function doThis() { $("#foo")... ...
$(document).ready(function() {
var foo = $("#foo");
doThis();
doThat();
thenDoThat();
...
function doThis() {
$("#foo")...
...
}
function doThat() {
$("#foo")...
...
}
function thenDoThat() {
$("#foo")...
...
}
...
});
我确实了解对象的生命周期,尤其是在垃圾收集环境中。因此,关于物体的范围将决定其寿命的回答并不能完全满足我的好奇心,因为这一事实是显而易见的
我的问题是,如果我反复访问$(“#foo”)
是的,这会影响性能。每次运行
$(选择器)
时,都必须构造一个新的jQuery对象。这就是说,除非你在短时间内运行大量这样的系统,否则影响是相当小的。例如:
const t1=performance.now();
对于(设i=0;i<300000;i++){
常量html=$('div').html();
}
const t2=性能。现在();
常量div=$('div');
对于(设i=0;i<300000;i++){
常量html=div.html();
}
const t3=性能。现在();
控制台日志(t2-t1);
控制台日志(t3-t2)代码>
foo
您应该提到选择器的类型也很重要。按ID、类等进行选择将求助于标准js函数(在具有此类标准函数的浏览器上)。一些特殊的,如:eq,:not等,需要进行dom遍历。至少这是高度依赖于浏览器的。