我知道在使用.addClass()
重新添加元素之前,没有必要检查元素是否有类:
https://stackoverflow.com/a/7403519/231914
但是其他jQuery操作呢?
在致电.show()
之前,我是否需要检查某些内容是否可见?
我是否需要检查某些内容是否已包含文字" FooBar"在致电.text('FooBar')
之前?
换句话说,如果性能很重要,我应该在执行某些操作之前进行检查,如果该操作可能实际上没有改变任何内容吗?
在大多数情况下,它可能并不重要。但我正在为window.scroll构建一个回调,因此性能是关键。
答案 0 :(得分:1)
不需要检查,除非您要做的事情比DOM操作需要检查的DOM操作多。
例如
if($('#my_element').is('not:visible') {
$(this).show();
} // requires 2 or more DOM operations
需要2个或更多DOM操作
其中
$element.show();
只需要1个DOM操作
答案 1 :(得分:0)
存在可衡量的性能差异,但不应存在可察觉的差异。当然,首先检查的平均性能更差,然后执行动作,但除非处理非常大的元素集合,否则它仍然不会是可察觉的差异。
不要过早优化代码。
在你的特定情况下,debouncing将是我达到的第一个工具,否则,我会踩油门,最后看看优化内部的代码(读作没有jQuery的情况下),如果没有其他的两个完成目标。
答案 2 :(得分:-1)
恕我直言,没有必要进行能见度检查...... 但是,在使用show()之前,您可以执行以下检查:
if($('#my_element').is('not:visible'){$(this).show();}
或:
if($('#my_element').is(':visible'){$(this).hide();}
至于" fooBar" - 因为这是一个变量 - 你必须执行检查是否设置...否则它将是"未定义":
if(typeof fooBar !== "undefined"){alert("set");}else{alert('not set');} //this will alert: not set"
var fooBar = "";
if(typeof fooBar !== "undefined"){alert("set");}else{alert('not set');} //this will alert: "set"