- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我有一个项目,我试图最大限度地优化一个相当复杂的 Javascript 函数 - 部分原因是它应该在智能手机 (Webkit) 上运行并且每一点都很重要。
我一直在使用各种调试和计时技术来检查我的代码并重写所有可能很慢的东西——比如基于 jQuery 的部分,而 native 可能做得更好等等。该函数所做的基本上是获取一串 html 文本并将其剪切以完全适合 3 个没有固定位置或大小的 DIV(客户端模板机制)。
目前,整个函数在 iPad 浏览器中执行大约需要 100 毫秒(但在生产环境中,理想情况下我需要执行 200 次),问题是在这 100 毫秒中,至少有 20 毫秒是因为这一行代码(3 个循环):
var maxTop = $(cur).offset().top + $(cur).outerHeight();
“cur”只是对容器 DIV 元素的引用,上面的行正在计算它的底部位置(所以我的文本应该在哪里中断)。通过查看偏移 jQuery 代码,我了解到它使用 getBoundingClientRect 甚至消除 jQuery 偏移/大小调整并直接调用它不会加速它 - 所以它的 getBoundingClientRect 错误(至少在 Webkit 中)。我对此做了一些研究,我知道它会导致布局重绘。
但仍然无法相信我执行了多个 DOM 清除/克隆/追加,而且所有这些都比简单的元素位置查找快得多?有什么想法吗?也许是特定于 webkit 的东西?或者不会导致重绘的东西?
非常感谢!
最佳答案
你试过吗:
var maxTop = cur.offsetTop + cur.offsetHeight;
?
要点是,offsetTop 和 offsetHeight 是原生 dom 属性,因此访问应该比通过函数访问更快。
关于javascript - 优化 JS/jQuery 性能(getBoundingClientRect)并消除布局重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664229/
我有一个在 windows-resize 事件上运行的 JS 函数 在该函数中,我设置了一个变量 width 以用于调整 d3 图表的大小。如果我“手动”调整窗口大小(即:拖动窗口边缘之一),宽度变量
我有一个 ClientRect 对象数组,这是我通过做得到的 var trackedElements = $('[track]'); var trackedBounds = []; _.each(tr
我正在使用 document.body.getBoundingClientRect().right 来查找顶部导航中的所有元素都在 View 之外,以便隐藏它们并将它们放在“更多”下拉列表下。但这个功
我一直在尝试使用一个函数来检测元素是否在视口(viewport)中: function isElementInViewport (el) { var rect = el[0].getBound
所以 jQuery 的 .width() always returns the clientWidth ,不管它是什么。但如果你想要亚像素精度,you have to opt for getBound
这里有一些有趣的东西:在任何 JS 窗口中运行: val = document.body.getBoundingClientRect(); console.log(val) val.left += 1
我对 DOMnode.getBoundingClientRect() 有疑问,因为返回的数据不一致。我正在使用 windows.onload(因为缺少更好的选择)来触发我的函数,该函数采用元素的 ge
下面的代码有什么问题吗? getBoundingClientRect 值并不总是相同,当我滚动后触发该函数时它会发生变化。如果我没有滚动页面,下面的函数才准确(滚动到正确的位置)。 scrollToT
我正在使用 getBoundingClientRect 来了解元素是否在页面中的特定点之上。所以我这样做: var rect = el.getBoundingClientRect(); if (rec
我正在为 ChartJS 使用自定义工具提示并定位工具提示,我需要使用 getBoundingClientRect 来获取图表的位置,然后相对于该位置移动工具提示。但是,从 getBoundingCl
我正在进入 div 元素的控制台顶部、左侧、右侧、底部属性: var offSet = document.getElementById("div").getBoundingClientRect();
我正在尝试向我的网站添加粘性导航,当它滚动到不同的部分时会发生变化。当滚动到带有 .dark 类的部分时,它应该将 Logo 和文本颜色更改为白色……否则为黑色。 下面是我一直在使用的 javascr
我已经在使用 getBoundingClientRect() 将子元素 wrt 的 getBoundingClientRect() 计算为 px 中的父元素并从一个组件传递到另一个组件,并且能够将子元
我正在使用 getBoundingClientRect函数并试图理解它的 top 行为。负顶是什么意思? 在下面的示例中,当您向下滚动时,top 的值变为负值。有人可以解释一下,我如何解释 getBo
这个问题在这里已经有了答案: How best to convert a ClientRect / DomRect into a plain Object (6 个答案) 关闭 3 年前。 func
getBoundingClientRect() 返回元素在 转换后屏幕上的坐标。如何在转换之前 计算这些坐标?即没有转换。 我发现的最简单的方法是: element.style.transform =
我构建了一个组件,该组件将根据其尺寸和在窗口中的位置确定其打开方向。我在 react-dom 节点上使用了 getBoundingClientRect() 函数。现在我已经更新了一些项目包,包括 re
也许这是个愚蠢的问题。 getBoundingClientRect() 返回什么类型?我有以下错误: var logo1: HTMLElement = document.getElementById(
背景:我目前正在开发一个项目,我的 JS 应用程序被嵌入到多个其他(父)JS 应用程序中。某些父应用程序可以通过将 display:block/none 设置为包含我的应用程序的某些元素来显示/隐藏我
我正在尝试获取图像上鼠标单击的坐标。所以我像这样使用 getBoundingClientRect function showCoords(canvas, event) { var rect =
我是一名优秀的程序员,十分优秀!