offsetWidth 属性性能很差吗?

最近一个电子表格的应用中需要对单元格进行批量宽度检查,然后发现执行效率很低下。
一步步跟踪执行时间后发现

if (div.offsetWidth < td.offsetWidth)

这么一行简单的判断语句,耗时近30ms!!!
太夸张了!执行500次这种判定,就要15秒。
尝试改写成 div.currentStyle.width 性能一样低下。

请问,有高性能的方法取到对象的实际显示宽度吗?
也许是获取div对象和td对象比较耗时

你不需要每次循环都获取td.offsetWidth啊,表格每行各列的单元格宽度都应该是一样的,
只需要获取第一行各列的单元格的offsetWidth,用数组保存,之后就不需要再获取了。

使用offsetWidth之类的属性时,会造成回流,所以比较消耗性能,资源代下载

理论上是,但是表格中如果出现合并单元格,那么保存各行各列宽度高度就不适用了。
比如我需要合并横向两个单元格,简单的做法是,设置主TD的 colSpan = 2,然后将后一个 TD 的 display 设置为 none
这样在拆分这个单元格时,将该 TD 的 colSpan = 1,移除后一个 TD 的 display:none 样式就行

另:只循环一行一列的 offsetWidth 和 offsetHeight 在行列多的情况下开销也很大,我现在只能采取变通的做法,如果发现当 前 TD 的 colSpan > 1或者 rowSpan > 1  则去获取 offsetWidth 和 offsetHeight, 否则则不获取。毕竟合并的单元格多出现在表头,所以运算量一下子小了很多。

感谢您的建议!

所以并没有好的解决办法是吧?

正如楼上所说,只能通过定义变量去保存offset的值.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值