setInterval()如何影响性能?

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

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

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

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

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

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

 var tooltipInNodes = document.getElementsByClassName("tooltip in"); var tooltipNodes = document.getElementsByClassName("tooltip"); setInterval(function() { if ( tooltipInNodes.length > 1 ) { $(tooltipNodes).remove(); } }, 1000); 

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

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

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

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

 setInterval(tmp_workaround, 1000); function tmp_workaround() { var $selectors = $('[TAG IF ALWAYS THE SAME].tooltip.in'); if ( $selectors.length > 1 ) { $selectors.remove(); } }