避免 HTML 文档重排

2023-11-22

我有数百个这样的“行”元素:

<div class='row'>
  <div class='cell'></div>
  <div class='cell'></div>
  <div class='cell'></div>
</div>

在页面上呈现它们之后,我需要获取它们的 clientHeight 。我知道“clientHeight”属性会强制回流,这会降低我的性能,因为它们太多了。然而 - 它们已经被渲染了,并且我知道它们的大小在它们被渲染的时间和我查询它们的高度的时间之间没有改变。

有没有办法告诉浏览器在查询高度时不要重排? 此外 - webkit 检查员说:

Layout tree size  5901
Layout scope      Whole document

而且 div 位于绝对定位的祖先中 - 不应该只重排绝对定位的元素吗?

Edit:

所以提供的答案是正确的。事实上,我弄脏了布局,因为我有这个循环:

rows.each(function(){
  $(this).css('height', this.clientHeight);
});

将代码更改为此解决了问题:

var heights = rows.map(function(){
  return this.clientHeight;
});
rows.each(function(){
  $(this).css('height', heights.shift());
});

每当 DOM 更改时,回流就会排队,但仅在以下情况下执行:

  1. 没有更多的 JavaScript 需要处理(脚本结束)或

  2. 当您查询必须呈现的计算值时,例如clientHeight.

因此,为了避免回流,您必须遵循以下规则

  • 更改 DOM 时不要查询 DOM

  • 当你想要查询的时候不要改变 DOM

实际上,这意味着您应该在修改 DOM 后将所有查询操作分组到脚本末尾。这样做只会对数千个元素回流一次,而不是对每个元素回流数千次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免 HTML 文档重排 的相关文章

  • 如何删除除任何特定 id 之外的元素

    假设有一个父 id 其中包含许多元素 我想删除除一个元素之外的所有元素 ex parent id children not id n remove
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • 使用ASP/VB获取节点属性值

    我有以下 XML 架构
  • 如何使用 Playwright 使用选择器查找框架 (iframe)

    我有一个小问题 无法找到使用 Microsoft Playwright 框架的答案 根据您可以使用以下代码获取 iframe const frame page frame frame login 但是如何使用选择器来查找 iframe 并与
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 如何使用角度材料在具有可扩展行的表格中创建嵌套垫表

    我有以下数据 id c9d5ab1a subdomain wing domain aircraft part id c9d5ab1a info mimetype application json info dependent parent
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 聆听 Angular 2 中的元素可见性

    我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 v4 我想监听指令中的元素以了解可见性变化 我的元素有一个可以隐藏其子元素的父元素hidden sm up我需要在每次隐藏或显示时触发一个函数 div hidden
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • Caffe可以直接对图像的像素进行分类吗?

    我想将图像的像素分类为 是街道 或 不是街道 我有一些训练数据KITTI数据集我看到 Caffe 有一个IMAGE DATA图层类型 标签以与输入图像大小相同的图像形式存在 除了 Caffe 之外 我解决这个问题的第一个想法是在应该分类的像
  • 在 M1 Mac 上找不到 PyTables 的 HDF5 安装

    在 M1 Mac macOS Monterey 上运行12 4 Python 3 10 3 pip install tables Collecting tables Using cached tables 3 7 0 tar gz 8 2
  • 我是否必须在 Webstart 应用程序中显式调用 System.exit() ?

    最近我将 Swing 应用程序转换为 Webstart 该过程非常简单 但我发现在关闭所有窗口后 我的应用程序的 JVM 并未终止 线程转储显示有几个非守护线程 特别是 Swing 的 EDT AWT 和几个与 websart 相关的线程
  • 如何隐藏 C++ 中的类?

    假设我有 2 个类 我希望它们可见 在给定的头文件中 还有一个类是它们的祖先 我希望其中一个类仅对前面提到的两个类可见 在C 中如何实现不可见的类功能 滥用class充当namespace会这样做 我不推荐这种模式 class hidden
  • 服务中的 postDelayed()

    我正在尝试在一段时间内自行重新启动服务 我的代码看起来像这样 在onStartCommand Looper prepare Handler handler new Handler handler postDelayed new Runnab
  • 如何在Python中读取格式化输入?

    我想从 stdin 读取输入的五个数字 如下所示 3 4 5 1 8 分成单独的变量 a b c d 和 e 我如何在Python中做到这一点 我试过这个 import string a input b a split 对于两个整数 但它不
  • 如何从 React Native 打开其他应用程序?

    如何从 ReactNative 打开其他应用程序 Gmail 相机 如何将数据从当前场景传递到其他应用程序 我找到了这个 npm 库反应本机应用程序链接可以打开其他应用程序 这是基于深层链接的 如果您有任何深层链接 那么这个库可以提供帮助
  • 摘要式身份验证的概念 - 它真的有效吗?

    据我了解 摘要式身份验证 这是一种单向操作 对密码进行哈希处理并将哈希数据传输到服务器 然后 服务器将使用存储的密码 对其进行哈希处理 并与接收到的哈希密码进行比较 应该可以免受中间人攻击 我不明白的是 如果我是中间人黑客 我不需要原始密码
  • 如何测试ActiveJob是否已入队?

    如果记录成功保存 我有一个创建操作 该操作会调用 ActiveJob def create object Object new importer params respond to do format if object save MyJo
  • Google Apps脚本ScriptApp.getService().getUrl()总是返回错误的URL

    根据文档 此方法应返回 Web 应用程序的 URL 如果已部署 则返回 Web 应用程序的 URL 否则返回 null 如果您正在运行开发模式 Web 应用程序 则返回开发模式 url 我们有一个 Google 日历插件 其中我们使用以下方
  • 如何使用 MyBatis 3.x 插入对象集合?

    我是 MyBatis 的初学者 我只想知道如何从类的实例插入对象集合 假设我有一个类 User 与一对多关系中的 Note 相关 我只想提一下 我通过 Hibernate 的 hbm2ddl 使用 JPA 2 注释构建了我的架构 我将添加在
  • 将 FileInfo 数组转换为字符串数组 C#

    我创建一个像这样的 FileInfo 数组 try DirectoryInfo Dir new DirectoryInfo DirPath FileInfo FileList Dir GetFiles SearchOption AllDir
  • 未知的自定义元素: - 您是否正确注册了组件?对于递归组件

    嘿 我在将 vuetify 导入我的项目时遇到问题 我究竟做错了什么 Vue warn 未知的自定义元素 您是否注册了 组件正确吗 对于递归组件 请确保提供 名称 选项 app js import Vue from vue import V
  • 在 ASP.NET MVC 3 视图中渲染 System.Drawing.Image 的最佳方法

    我有一个 System Drawing Image 类型的对象 并且想在视图中显示该图像 最好的方法是什么 我发现了一些可能适合这种情况的自定义 Html Helper 方法 还发现了一个使用新操作方法的示例 该方法返回FileConten
  • 使用 Windows 在 Sublime Text 控制台中打印 utf 8 字符串

    当运行此代码时python myscript py从 Windows 控制台cmd exe i e outsideSublime Text 的 它的工作原理是 coding utf8 import json d json loads myk
  • 如何加快 Django 中大型数据集的迭代速度

    我有一个来自 Django ORM 查询的查询集 其中包含大约 1500 条记录 我使用了 select lated 和 only 方法来确保查询是严格的 我还使用了connection queries来确保只有这一个查询 也就是说 我确保
  • C#:如何从表单及其控件中拖动?

    我使用以下代码通过单击并拖动表单本身来拖动无边框表单 它可以工作 但当您单击并拖动窗体上的控件时 它就不起作用了 我需要能够在单击某些控件而不是其他控件时拖动它 通过标签拖动 但不能通过按钮和文本框拖动 我该怎么做 protected ov
  • lib commonCrypto 不适用于 iOS 模拟器?

    我一直在我的项目中添加 libCommonCrypto dylib 来进行 md5 哈希验证 在 iPhone iOS 5 1 上运行一切正常 但是当我尝试在模拟器上运行它时 出现以下错误 ld library not found for
  • 在 SQL Server 中使用 SELECT 仅获取包含字母数字数据(和某些标点符号)的字段

    我正在尝试过滤一些 SQL Server 数据并需要满足以下条件的结果 其中字段包含字母数字字符 不区分大小写 其中字段有一定的标点符号 撇号和连字符 该字段没有空格 有没有一种有效的方法可以在 SQL Server 中使用 CHAR 来做
  • 避免 HTML 文档重排

    我有数百个这样的 行 元素 div class row div class cell div div class cell div div class cell div div 在页面上呈现它们之后 我需要获取它们的 clientHeigh