setInterval()如何影响性能?

时间:2013-04-19 11:53:18

标签: javascript jquery performance web-applications

我们正在使用Twitter Bootstrap构建一个Web应用程序作为框架,并且在显示/隐藏工具提示时遇到问题。除了试图找到实际问题的解决方案之外,我对我们在此期间使用的解决方法有疑问:

性能方面,使用setInterval()通常是个坏主意吗?

如何衡量由此造成的性能影响?

是否有更好的方法可以不断检查元素的存在并将其删除?

// temporary workaround to remove unclosed tooltips
setInterval(function() {
    if ( $('.tooltip.in').length > 1 ) {
        $('.tooltip').remove();
    }
}, 1000);

2 个答案:

答案 0 :(得分:1)

如果你真的,真的担心性能,使用实时节点列表可能会更快:

var tooltipInNodes = document.getElementsByClassName("tooltip in");
var tooltipNodes = document.getElementsByClassName("tooltip");

setInterval(function() {
    if ( tooltipInNodes.length > 1 ) {
        $(tooltipNodes).remove();
    }
}, 1000);

尽管如此,这不太可能产生太大影响,正如已经提到的,使用长间隔的setInterval(第二个很大,4ms很小)不太可能产生任何重大影响。

答案 1 :(得分:0)

最好避免使用此技术,但在找到真正的解决方案之前,您可以优化此解决方法。

创建一个非匿名函数并调用它,你将每秒都避免“创建上下文函数”。

您还可以通过缓存优化jQuery选择器并指定标记名称。

setInterval(tmp_workaround, 1000);

function tmp_workaround() {
  var $selectors = $('[TAG IF ALWAYS THE SAME].tooltip.in');

  if ( $selectors.length > 1 ) {
    $selectors.remove();
  }
}