使用jQuery,执行无效的操作会有性能影响吗?

时间:2015-11-25 18:39:47

标签: jquery performance

我知道在使用.addClass()重新添加元素之前,没有必要检查元素是否有类: https://stackoverflow.com/a/7403519/231914

但是其他jQuery操作呢?

在致电.show()之前,我是否需要检查某些内容是否可见?

我是否需要检查某些内容是否已包含文字" FooBar"在致电.text('FooBar')之前?

换句话说,如果性能很重要,我应该在执行某些操作之前进行检查,如果该操作可能实际上没有改变任何内容吗?

在大多数情况下,它可能并不重要。但我正在为window.scroll构建一个回调,因此性能是关键。

3 个答案:

答案 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"