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您可以添加注释作为答案。漂亮的图形!人们喜欢图形!