javascript - 哪个更快,直接选择元素还是先选择其父元素?
问题描述
这是我的 DOM 树:
鉴于选项:
d3.select("body").select("svg").selectAll(".circle_g")
d3.select("body").selectAll(".circle_g")
你知道哪个更快吗?
解决方案
根据经验,选择越多,代码的性能就越差。
因此,如果目标元素(类circle_g
)是该类的唯一元素,最好的选择就是这样做:
d3.selectAll(".circle_g")
添加的选项越多,代码越慢。因此,这将需要更长的时间来运行:
d3.select("body").selectAll(".circle_g")
最后,这是最糟糕的选择:
d3.select("body").select("svg").selectAll(".circle_g")
这个JSPerf清楚地显示了性能上的差异。我在我的机器中拥有的值是(大约):
d3.selectAll(".circle_g")
: 最快的选择。d3.select("body").selectAll(".circle_g")
: 慢 11%。d3.select("body").select("svg").selectAll(".circle_g")
: 慢 20%。
值得一提的是,使用 CSS 空间选择器,像这样......
d3.selectAll("body svg .circle_g")
... 比上面的第三个选项性能更高,但仍然比第一个选项低(大约慢 6%)。
总之,不要选择父母,这不仅没用而且会降低性能。直奔目标:d3.selectAll(whatever)
。
编辑
您的评论阐明了您的具体情况,谢谢。
因此,在非常具体的情况下...
- DOM 中有大量元素
- 您的目标元素都在同一个父级中
...首先选择父级会稍微快一些,因为您不必在所有 DOM 中搜索目标元素。因此,在这种特定情况下,这是:
d3.select(parent).selectAll(target)
比这更快:
d3.select(target)
看一下这个JSPerf,看看不那么拥挤的 HTML 中的一些值。给出具体情况,页面中的元素越多,差异最大。
最后,值得一提的是,在生产代码中这通常无关紧要,因为 D3 程序员通常(或者我应该说希望?)在selectAll
. 像这样的东西:
const svg = d3.select("svg")
const circles = svg.selectAll(".circle_g")
//parent here----^
推荐阅读
- ios - 如何更改 UIBezierPath() 图的 z 位置?
- node.js - 使用gulpfile时如何修复“任务'test'不在你的gulpfile中”错误
- javascript - 未捕获的类型错误:$.simpleTicker 不是函数
- html - 如何使用 CSS 设置平滑滚动的速度?
- excel - 如何编写一个可以组合不定长度的两列的函数
- ruby-on-rails - 如何使用 rails 和 ruby 修复 sqlite3 错误
- angular - 角路由器链接不导航
- angular - Angular rxjs Observables 找到第一个活着的服务器
- laravel - Laravel 邮件未从 Cron Job 发送
- javascript - 使用 MongoDB 调用 close 后 Node.js 再次连接