javascript - getComputedStyle local vs every time in function Performance
问题描述
如果我需要在代码中的不同位置多次使用元素的 ComputedStyle,哪一种性能更好。将 ComputedStyle 设为全局变量是好是坏?
在元素移动很多的情况下,全局变量也可以更好地提高性能,但我不需要每次移动时都计算样式,但只有在触发特殊事件时才会在这种情况下计算全局变量中的样式在我不需要的情况下重新计算?
还是仅当我尝试从计算的样式变量中获取值时才开始计算?
使用 getBoundingClientRect 时也会出现这种情况吗?
解决方案
根据规范,它是一个活动对象,因此它会在您请求该属性时获得该属性,而不是在您获得该对象时获得该属性。
我们也可以通过实验验证:
var example = document.getElementById("example");
var style = getComputedStyle(example);
console.log("A: color = " + style.color);
example.className = "green";
console.log("B: color = " + style.color);
.green {
color: green;
}
<div id="example">Lorem ipsum</div>
输出:
答:颜色 = rgb(0, 0, 0) B: 颜色 = RGB(0, 128, 0)
在 Chrome、Firefox、IE11 和 Edge 上。请注意添加类如何更改属性值。
既然如此,我怀疑getComputedStyle
它真的很快,无论你是保留对象还是重复调用来获取它,都没有太大的区别。但与往常一样,当性能至关重要时(在这种情况下真的很重要吗?),测试您的实际代码的性能。
将 ComputedStyle 设为全局变量是好是坏?
我强烈建议尽可能避免实际的全局变量。在浏览器上,全局命名空间非常拥挤,很容易发生冲突。(例如:除了字符串之外,您不能调用全局name
并为其分配任何内容,因为它与window.name
属性冲突,该属性是窗口的名称,并且始终是字符串。)几乎可以完全避免他们。但是,如果您需要它们,您可以拥有对您的代码是全局的变量。例如,在下面,对于示例中example
的代码是全局的,但不是实际的全局变量:
// Scoping function
(function() {
// `example` is "global" to this code
var example = 21;
function foo() {
console.log(example);
}
function bar() {
example *= 2;
}
bar();
foo();
})();
一种更现代的方式是使用模块。真正的 JavaScript 模块在现代 Web 浏览器中工作,您可以使用 Webpack 或 Rollup 等捆绑器来处理为旧版浏览器创建捆绑包。
推荐阅读
- python - 如何检查列表中每个元组的第一个元素是否是字典的键?
- javascript - 错误:超过最大更新深度。componentWillUpdate 或 componentDidUpdate。React 限制嵌套更新的数量以防止无限循环
- python - 在 postgresql 查询中传递列和值列表
- actions-on-google - 无法将用户添加到 Alpha 测试
- python - 当这个问题出现时,如果我想继续我的代码怎么办?RuntimeError:未找到最佳参数
- django - 如何在 DRF 中创建多个实例?
- python - 如何使用 python 从 Cardinal Scale 头的串口读取序列值?
- css - 是否可以通过另一个元素的值设置元素的 CSS 值?
- docker - Traefik 2 仪表板自定义上下文路径
- javascript - 如何在角度中使超级参数可选?