Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一次又一次地使用同一查询选择器是否会造成性能损失?_Javascript_Jquery_Garbage Collection_Javascript Engine - Fatal编程技术网

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")... ...

在一个文档中搜索同一查询选择器的性能成本加起来是否相当大,或者管道中的某些代码(来自正在使用的JavaScript库(例如jquery)或JavaScript引擎或浏览器引擎)是否缓存了查询选择器

$(document).ready(function() {

  var foo = $("#foo");

  doThis();
  doThat();
  thenDoThat();
  ...

  function doThis() {
    $("#foo")...
    ...
  }

  function doThat() {
    $("#foo")...
    ...
  }

  function thenDoThat() {
    $("#foo")...
    ...
  }

  ...
});
我确实了解对象的生命周期,尤其是在垃圾收集环境中。因此,关于物体的范围将决定其寿命的回答并不能完全满足我的好奇心,因为这一事实是显而易见的

我的问题是,如果我反复访问
$(“#foo”)

  • 这是否会增加大量的CPU时间,并将其以适当的级别缓存在代码中以避免此类成本,或者

  • 某些代码已经缓存了它,或者

  • 无论做了多少次,它是否完全可以忽略不计


  • 是的,这会影响性能。每次运行
    $(选择器)
    时,都必须构造一个新的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遍历。至少这是高度依赖于浏览器的。