我正在测试一个我的朋友注意到的测试用例。他在循环中使用 window.innerheight,并且 fps 出现了非常显着的下降。
这是我为测试它而创建的 jsperf 的链接http://jsperf.com/innerheight
我能想出的唯一解释是,这是一个吸气剂,每次调用都会计算实际高度。那正确吗?有什么文件可以验证吗?
我正在测试一个我的朋友注意到的测试用例。他在循环中使用 window.innerheight,并且 fps 出现了非常显着的下降。
这是我为测试它而创建的 jsperf 的链接http://jsperf.com/innerheight
我能想出的唯一解释是,这是一个吸气剂,每次调用都会计算实际高度。那正确吗?有什么文件可以验证吗?
这个问题是几年前发布的,但以防其他人在这里遇到类似的结果。
从这个博客:
问题是 WebKit 几乎每次使用类似于 getBoundingClientRect 的东西时都喜欢重新计算 dom 的布局。(即使获取 window.innerHeight/innerWidth 也会强制重新计算)......所有从 DOM 获取任何计算尺寸的调用都应该被缓存或避免。
在初始化和每次调整大小时缓存窗口尺寸一次显着提高了我的性能。
在您的第一个循环(innerheight)中,您正在访问一个 objects 属性并将其分配给h
. 在第二个循环(缓存)中,您只有h
. 当然,缓存的会更快。