Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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 在jQuery中,在尝试绑定事件处理程序之前检查元素是否存在是否更快?_Javascript_Jquery_Performance - Fatal编程技术网

Javascript 在jQuery中,在尝试绑定事件处理程序之前检查元素是否存在是否更快?

Javascript 在jQuery中,在尝试绑定事件处理程序之前检查元素是否存在是否更快?,javascript,jquery,performance,Javascript,Jquery,Performance,首先检查元素是否存在,然后绑定事件处理程序是否更快,如下所示: if( $('.selector').length ) { $('.selector').on('click',function() { // Do stuff on click } } 还是简单地做以下事情更好: $('.selector').on('click',function() { // Do stuff on click } 所有这些都发生在文档准备就绪时,因此延迟越少越

首先检查元素是否存在,然后绑定事件处理程序是否更快,如下所示:

if( $('.selector').length ) {
    $('.selector').on('click',function() {
          // Do stuff on click
    }
}
还是简单地做以下事情更好:

$('.selector').on('click',function() {
     // Do stuff on click
}
所有这些都发生在文档准备就绪时,因此延迟越少越好。

只需使用

$('.selector').on('click',function() {
     // Do stuff on click
}
如果类
选择器不存在任何元素,jQuery将不会绑定任何内容。

$('.selector')。在('click',function(){//dostuff on click}

如果元素不存在,则将绑定。因此这会更快。

直接使用绑定

$('selector').on('click',function() {
    // Do stuff on click
}

如果没有具有指定选择器的元素,它将不会执行任何操作-甚至不会发布错误,这意味着对元素的实际检查将执行相同的操作两次。我不会将其称为对元素存在性的检查,但在jQuery中实现这一点的方式肯定是这样的。

更好的wri方法如果支票是这样的

var elems = $('.selector');
if( elems.length ) {
    elems.on('click',function() {
          // Do stuff on click
    });
}
让我们测试一下,看看代码告诉我们什么

最后你说的是毫秒级的差异,非if检查在运行一次时不会被注意到。这也没有考虑到何时有元素要查找,而不是在这种情况下,有一个额外的if检查。该检查是否重要

让我们看看他们什么时候找到元素

实际上没有什么区别。所以如果你想节省一毫秒的小数,那么就使用if。如果你想要更紧凑的代码,就不要用jQuery的方式。最后它也会这样做


if($('.selector').length){$('.selector').on('click',function(){//Do stuff on click}
会慢得多,因为选择器会被计算两次……如果缓存它,我认为它不会与更快的选择器产生太大的差异。如果它更快,则会在函数开始时进行测试。在分析之前添加这样一个测试会阻碍未测量性能增益的可读性,这将是一个非常复杂的情况成熟的优化。$('.selector')。如果元素不存在,则('click',function(){//Do stuff on click}将绑定。所以这更快。@Bharadwaj您可以添加注释作为答案。漂亮的图形!人们喜欢图形!