4 performance jquery children css-selectors
我知道我只是在OCD上花了几毫秒的性能时间,但我只是想知道为什么以下对我来说是真的.这似乎违背了我的逻辑.
我目前有一个div,它在悬停时淡化了里面的图像:
$('div.someclass').hover(function() {
$(this).children('img').fadeOut(function(){
// do something
});
}, function() {
// do something
});
Run Code Online (Sandbox Code Playgroud)
经过一些测试后,(通过选择器循环1000次,取9次测试的平均值)我使用了3种不同的选择器并得出结论:速度按以下顺序排列:
$(this).children('img')
运行速度最快-avg约400ms;$('img', this)
- 平均约900毫秒; 和$(this).find('img')
运行最慢 - 平均约1000毫秒这违背了两个函数调用慢于一的逻辑.另外,我已经在内部阅读过,jQuery将第二种情况转换为第三种情况,那么第三种情况会更慢吗?
有什么想法吗?
Bli*_*ixt 12
之间的区别$(this).find('img')
,并$(this).children('img')
是该children
功能只查找直接 <img>
后裔,而find
功能发现任何<img>
在下面的DOM元素的层次结构的任何地方$(this)
.这就是为什么children
更快.
$(this).children('img')
:
<h1> <!-- Is this img? Nope! -->
<img alt="" src="..." /> <!-- Never checked. -->
<span>Bla bla</span> <!-- Never checked. -->
</h1>
<a href="#"> <!-- Is this img? Nope! -->
<img alt="" src="..." /> <!-- Never checked. -->
</a>
<img alt="" src="..." /> <!-- Is this img? Yeah, return it! -->
Run Code Online (Sandbox Code Playgroud)
$(this).find('img')
:
<h1> <!-- Is this img? Nope! -->
<img alt="" src="..." /> <!-- Is this img? Yeah, return it! -->
<span>Bla bla</span> <!-- Is this img? Nope! -->
</h1>
<a href="#"> <!-- Is this img? Nope! -->
<img alt="" src="..." /> <!-- Is this img? Yeah, return it! -->
</a>
<img alt="" src="..." /> <!-- Is this img? Yeah, return it! -->
Run Code Online (Sandbox Code Playgroud)
如您所见,使用时不会检查三个元素children
,从而提高性能.
归档时间: |
|
查看次数: |
989 次 |
最近记录: |