在调用 jQuery.hide() 函数之前检查元素是否已经隐藏是否有意义?(并与 jQuery.show() 类比)
阅读函数源代码,在我看来,不管元素属性如何,它都会运行。检查或让函数集属性结束是否需要更多时间?
在调用 jQuery.hide() 函数之前检查元素是否已经隐藏是否有意义?(并与 jQuery.show() 类比)
阅读函数源代码,在我看来,不管元素属性如何,它都会运行。检查或让函数集属性结束是否需要更多时间?
这类问题最好通过实际的性能测试来回答,而 jsperf 系统使测试变得非常容易。
令我惊讶的是,如果已经设置了所需的样式,那么在设置之前先检查一下似乎确实可以节省一些性能周期(在 Chrome 和 Firefox 中)。
您可以在这里看到许多不同的组合:http: //jsperf.com/hide-vs-check
作为这两个选项之间最简单的比较:
elem.style.display = "none";
elem.style.display = "none";
和
elem.style.display = "none";
if (elem.style.display !== "none") {
elem.style.display = "none";
}
第二个选项稍微快一点。这表明设置样式,即使它已经设置为该值仍然需要大量成本,并且确实可以节省时间以避免在不需要时设置它。
或者两个选项的 jQuery 版本:
elem.style.display = "none";
elem$.hide()
和
elem.style.display = "none";
if (elem$.css("display") !== "none") {
elem$.hide();
}
仍然表明,当已设置所需状态时,第二个选项更快。
但是,如果需要更改状态,那么额外的测试(显然)会减慢您的速度。这里的第一个选项比第二个选项快,因为如果条件评估为真,则条件只会花费额外的时间:
elem.style.display = "block";
elem$.hide()
和
elem.style.display = "block";
if (elem$.css("display") !== "none") {
elem$.hide();
}
检查属性更耗时。首先 jQuery 必须找到元素,然后检查以下所有内容:
none
.type="hidden"
.在另一种情况下,设置属性只需 2 个步骤 - 找到元素并分配(或覆盖)属性。