首页 > 其他分享 >offsetTop为啥会影响性能?

offsetTop为啥会影响性能?

时间:2024-12-20 23:41:53浏览次数:7  
标签:浏览器 读取 为啥 性能 布局 计算 offsetTop

offsetTop 是一个只读属性,它返回元素的顶部相对于其包含块(通常是最近的已定位祖先元素)的偏移量。当在一个页面中频繁或大量使用 offsetTop 来获取元素的位置时,可能会影响性能,主要原因如下:

1. 强制同步布局 (Layout Thrashing)

每当访问 offsetTop 或其他与布局相关的属性(如 offsetLeft, offsetWidth, offsetHeight, clientTop, clientLeft, scrollTop, scrollLeft, getBoundingClientRect() 等),浏览器必须确保它拥有最新的布局信息。这意味着浏览器可能会强制进行同步布局计算,即使这些计算在当前的 JavaScript 执行上下文中不是必要的。

如果在同一任务中先修改了DOM样式,然后紧接着就去读取 offsetTop,那么浏览器会立即重新计算布局以提供准确的数据。这种模式被称为 "layout thrashing",即反复触发不必要的布局重排,这会对性能产生负面影响,尤其是在复杂页面上。

2. 布局抖动

连续地读取和写入导致布局变化的属性也会造成所谓的“布局抖动”。例如,如果你在一个循环里不断地读取 offsetTop 并根据结果调整样式,每一次读取都会引起一次完整的布局计算,这将极大地降低性能。

3. 浏览器优化限制

现代浏览器通常会对布局计算进行一定的优化,比如批量处理多个样式更改后再一次性重新计算布局。然而,一旦开发者直接请求了一个依赖于最新布局信息的属性,浏览器就必须放弃这些优化并即时更新布局,从而降低了效率。

如何避免性能问题

  • 缓存值:如果你需要多次使用同一个元素的 offsetTop 值,考虑将其存储在一个变量中,而不是每次都重新查询。

  • 批处理操作:尽量减少在短时间内对 DOM 的读写次数,尝试将所有必要的读取放在一起来做,同样地,所有的写入也应尽可能一起完成。

  • 使用 requestAnimationFrame:对于那些需要在每一帧都获取最新布局信息的情况,可以利用 requestAnimationFrame API 来确保你的代码是在下一次屏幕刷新之前被执行,这样可以更好地配合浏览器的渲染流程。

  • 虚拟化长列表:如果是由于滚动事件或者其他频繁发生的用户交互而不断触发 offsetTop 的读取,考虑实现虚拟滚动或其他形式的内容懒加载来减少不必要的计算。

通过遵循上述建议,你可以有效地减轻因频繁使用 offsetTop 而带来的性能负担。

标签:浏览器,读取,为啥,性能,布局,计算,offsetTop
From: https://www.cnblogs.com/longmo666/p/18620123

相关文章

  • React性能优化实战:从理论到落地的最佳实践
    "这个列表页怎么这么卡?"产品经理皱着眉头看着我。作为一个接手海外电商项目的前端开发者,我深知性能问题的重要性。特别是在东南亚市场,很多用户使用的是中低端手机,网络条件也不太理想。最近一个月,我带领团队对整个React应用进行了一次全面的性能优化,不仅解决了性能问题,还总......
  • PowerShell 脚本的作用是通过调用 NGEN (Native Image Generator) 工具来优化 .NET 程
    $Env:PATH=[Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()[AppDomain]::CurrentDomain.GetAssemblies()|%{ $pt=$_.Location if(!$pt){continue} if($cn++){''} $na=Split-Path-Leaf$pt Write-Host-ForegroundColorY......
  • 集智书童 | 从RAW到RGB的完美转换:RealCamNet 端到端摄像头成像 Pipeline 提升成像性能
    本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。原文链接:从RAW到RGB的完美转换:RealCamNet端到端摄像头成像Pipeline提升成像性能!近年来,神经摄像头成像管线的最新进展表明取得了显著的进步。然而,实际成像Pipeline仍然面临包括系统组件缺乏联合优化、计算......
  • 数据库设计的四大原则:优化性能、保证一致性与高效处理
    目录一.数据冗余最小化二.数据一致性三.事务处理四.查询性能优化数据库设计不仅是关于创建表和字段的简单任务,更是构建一个高效运行、易于维护且能够确保数据一致性的系统的核心。一个好的数据库设计不仅能提升应用程序的性能,还能为未来的扩展和维护奠定坚实基础。......
  • 性能测试的一般流程及性能测试场景的设计方法
    原文连接:https://mp.weixin.qq.com/s/vvQPgH7W4i61aiAt21dFfA 整理|TesterHome社区来源|部分内容来自自如技术公众号作者李文 概念介绍  什么是性能测试?性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试的过程。这......
  • Netty的高性能之道
    一、概述1.1惊人的性能数据最近一个圈内朋友通过私信告诉我,通过使用Netty4+Thrift压缩二进制编解码技术,他们实现了10WTPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。事实上,我对这个数据并不感到惊讶,根据我5......
  • 【实用技巧】MD5 的重复请求应用以及性能测试
    1 前言大家可能都遇到幂等或者娇艳重复提交的问题,比如重复的JSON请求、文件上传相同的文件重复上传了两次等,当然了确实存在某种情况比如人家用户一会上传了一个文件隔了一会儿又上传一个同样的文件是合理的,我们要做的就是短时间内的重复提交。这个时候我们可以通过计算请求......
  • NVIDIA 控制面板 是一个功能强大且易于使用的工具,可以帮助用户根据不同需求优化显卡的
    NVIDIA控制面板(NVIDIAControlPanel)是由NVIDIA提供的一款图形卡驱动软件,主要用于配置和调整与NVIDIA显卡相关的各种设置。它通常安装在你的计算机上,当你安装了NVIDIA显卡驱动时,控制面板也会被自动安装。一、NVIDIA控制面板的功能NVIDIA控制面板提供了多种功能,让用户能......
  • Win11性能优化:如何调整至最佳性能模式
    Win11性能优化:如何调整至最佳性能模式Windows11作为微软最新的操作系统,为用户带来了诸多新特性和改进。其中,性能模式的调整对于追求极致使用体验的用户来说尤为重要。通过调整至最佳性能模式,您可以显著提升计算机的响应速度和运行效率。然而,一些用户在升级到Windows11后,......
  • ADSP-TS101SAB1Z100 一款高性能数字信号处理器DSP芯片
    描述ADSP-TS101S是TigerSHARC处理器系列中的第一位成员。ADI公司的TigerSHARC处理器面向依赖多个处理器协作执行运算密集型实时功能的多种信号处理应用,非常适合视频和通信市场,包括3G蜂窝和宽带无线基站以及国防、医疗成像、工业仪器仪表等。ADSP-TS101S采用静态超标量架构,集成......