为什么执行时间为现在?两倍长可见?在 ruby/watir?

Why is the execution time for present? twice as long as visible? in ruby/watir?

阅读了几个网页后,其中 Testing by Justin Ko

从那个

  1. 我会预测存在吗?将是最快的,因为它只检查元素是否存在。
  2. 那个礼物?将是第二快的,因为它检查是否存在和可见性。
  3. 那个看得见?将是最慢的,因为(正如我所读)它还必须迭代 DOM 元素树。

简单地检查一个元素听起来像是常数时间,而迭代听起来像是线性时间。

我碰巧 运行 进行了一些时间测试,并认为对上述方法进行计时也会很有趣。我的一个预测是错误的。

存在吗?最快;进来只是比可见的快一点? 然而,现在?大约是可见速度的两倍?

我尝试以不同的顺序调用这些方法,并将它们包含在 1.upto(10) 循环中以平均时间。相同的结果。

这里发生了一些我不明白但我想了解的事情。有谁知道为什么要呈现?需要大约两倍的可见时间?或者至少有一个假设?

礼物有意义吗?是最慢的,因为它检查存在 AND 的可见性。

https://github.com/watir/watir-webdriver/blob/6212504320559a90966052506c5e9e26b7d16533/lib/watir-webdriver/elements/element.rb#L406

def present?
  exists? && visible?
end

只要存在就需要那么长的时间才有意义吗?可见?合并。