在JavaScript中获取未样式化元素的高度/宽度的最快方法是什么?

Alp*_*Dev 5 javascript performance

我在测量非临时未样式化元素的高度/宽度时遇到了性能问题。读取以下属性似乎很慢:

.offsetHeight
.clientHeight
.scrollHeight
Run Code Online (Sandbox Code Playgroud)

我在其他地方读到它很慢,因为以某种方式阅读它们会导致重排。至少,这就是我所发现的offsetHeight,但是其他两个的表现相同。这里存在某种量子魔术,因为从逻辑上读取属性不应导致页面重排。无论如何,有没有一种更快的方法可以在最简单的条件下查找元素的宽度/高度,在这种情况下该元素没有像margin, padding, border它那样应用任何样式,或者没有其他样式?

.style.height只是返回空字符串,因为它仅从style=""属性读取值,该属性在明确定义之前为空。

更新:window.getComputedStyle(el).height执行速度一样慢。

cla*_*aya -1

如果使用该getBoundingClientRect()方法会怎样:该方法返回元素的大小及其相对于视口的位置。它不会触发回流,因此可以更快,但这完全取决于页面的复杂性和页面上元素的数量。

  • “它不会触发回流,”是的,它会触发。“但这完全取决于页面的复杂性和页面上元素的数量。” 假设它不需要更新框布局(从而触发回流),为什么它取决于页面复杂性?(它确实取决于页面的复杂性,但那是因为它实际上会触发回流,如“offsetHeight”等) (2认同)