我们正在使用Twitter Bootstrap构建一个Web应用程序作为框架,并且在显示/隐藏工具提示时遇到问题。除了试图找到实际问题的解决方案之外,我对我们在此期间使用的解决方法有疑问:
性能方面,使用setInterval()通常是个坏主意吗?
如何衡量由此造成的性能影响?
是否有更好的方法可以不断检查元素的存在并将其删除?
// temporary workaround to remove unclosed tooltips
setInterval(function() {
if ( $('.tooltip.in').length > 1 ) {
$('.tooltip').remove();
}
}, 1000);
答案 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();
}
}