javascript - Javascript - 直接访问元素或设置变量更快?
问题描述
我正在使用 HTML<audio>
元素,我想知道直接引用元素的属性与设置变量相比是否更快(或完全相同)。例如,如果我在函数中使用audio.ontimeupdate
事件并引用audio.currentTime
了几次。哪个更快:
seconds = (parseInt(track.currentTime % 60)).toLocaleString(undefined, {minimumIntegerDigits: 2});
minutes = parseInt((track.currentTime / 60) % 60);
duration.innerHTML = minutes + ':' + seconds ;
playhead.value = track.currentTime * (1000 / track.duration);
或者
let CurrentTime = track.currentTime;
seconds = (parseInt(CurrentTime % 60)).toLocaleString(undefined, {minimumIntegerDigits: 2});
minutes = parseInt((CurrentTime / 60) % 60);
duration.innerHTML = minutes + ':' + seconds ;
playhead.value = CurrentTime * (1000 / track.duration);
还是根本没有区别?显然,这每秒更新多次,这就是我想知道的原因。
我只问是因为当我访问 DOM 元素时,这显然是不同的,如果多次使用,我会设置一个变量。
解决方案
还是根本没有区别?
在绝大多数情况下根本没有区别。如果存在差异,则只有在这部分代码运行不合理的频率(每秒数千次)时才能检测到。
但即使在这种情况下,瓶颈也将是
duration.innerHTML =
部分,因为 DOM 操作要昂贵得多。
除非这段代码不合理地频繁运行,否则不值得担心。IMO,最好编写尽可能可维护的代码,而不必担心性能。
如果您要优化这部分代码的性能,我建议您保存该innerHTML
值,这样您就不会无条件地运行
duration.innerHTML = minutes + ':' + seconds ;
每次,但仅在需要更新该部分时。(或者使用像 React 这样的框架来自动为你优化。)
推荐阅读
- azure-data-factory - 在 Azure 数据工厂和 Databricks 运行时的传输过程中是否对数据进行了加密?
- c# - 创建一个具有值为 sender 的按钮的函数
- python - Python - 从具有 ID 的文件中删除切片
- javascript - 在javascript中从用户获取变量的名称
- azure-resource-manager - ARM 模板子子资源冲突,无法引用自身
- java - Java Swing ImageIcon 未在 JLabel 中显示
- java - 带有正文的 Java 后端 POST 请求到 Spring 端点,该端点返回重定向到另一个 URL
- node.js - AWS SAM:无法从函数安装,因为它不包含 package.json 文件
- r - 有没有办法在 R 中使用 facet_grid 和交互式 plot_ly?
- sql - 数据库结构:如何根据“祖父”表定义表中键的唯一性?