5

请考虑以下 jQuery 代码:

if ($(this).is(':hidden')) {
    $(this).show();
}

我的问题:

  • 在发出 show() 命令之前检查元素的可见性是否值得?
    • 即 DOM 写入是否比 DOM 读取更昂贵,这种模式是否包括小的性能优化?
  • 或者是没有实用程序的可见性检查,简单地,无条件地发出 show() 命令会是更简洁的代码吗?
4

3 回答 3

6

如果你想显示它,我不会费心检查它是否隐藏 - 我只会显示它。我认为不进行条件检查会有一个小的性能优势,但我也相信它可能非常微不足道。

我创建了一个性能测试,它表明没有检查结果,执行速度提高了 25%。您可以在http://jsperf.com/is-hidden-check在线查看(并在几个浏览器中对其进行测试)。

于 2012-04-22T16:13:28.800 回答
2

除了为您提供极少的速度提升之外,它甚至可能并不总是按照您的意愿行事:

来源

:hidden 的确定方式在 jQuery 1.3.2 中发生了变化。如果一个元素或其任何父元素在文档中没有占用空间,则假定它是隐藏的。不考虑 CSS 可见性(因此 $(elem).css('visibility','hidden').is(':hidden') == false)。

检查可见性并不是非常复杂,但恕我直言,即使是这段摘录也表明它并非微不足道。虽然您可以在每次使用时确保可见性检查正常工作:hidden以确保此代码正常工作,但您可能会忘记可能有机会保存的 5 毫秒,而是为自己保存每次该区域可能出现问题时,花费时间来理解代码和检查文档。

只需使用普通的 oldshow() ; 如果有理由事先进行检查,我相信制作 jQuery 的好人会在文档中的某个地方提供这样做的建议,或者只是将检查硬编码到show方法中/:D

于 2012-04-22T16:27:01.777 回答
0

您的可见性检查可能会节省一些精力,因为如果它没有真正隐藏,它不会发出 .show() 。

所以我想去吧

于 2012-04-22T16:15:05.843 回答