JQuery - select class 或是select id?
2015-11-24 15:49
651 查看
如果必须使用class选择器的话,可以通过自定可选的上下文参数来提高效率。
$(".someclass", "#somecontainer")
IE9
Chrome 12
Firefox 3.6
So among these big 3 modern browsers, the context parameter only seems to help IE9. Older browsers will also benefit from the context parameter. But considering the prevalence of each of these browsers and averaging everything out, the net gain is somewhat
of a wash now.
And here's the code in case anyone wants to try it themselves...
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
startTime = new Date().getTime();
for (i = 0; i < 10000; i++)
{
s = $(".someclass");
}
$("#withoutcontext").html(elapsedMilliseconds(startTime));
startTime = new Date().getTime();
for (i = 0; i < 10000; i++)
{
s = $(".someclass", "#somecontainer");
}
$("#withcontext").html(elapsedMilliseconds(startTime));
});
function elapsedMilliseconds(startTime)
{
var n = new Date();
var s = n.getTime();
var diff = s - startTime;
return diff;
}
</script>
</head>
<body>
<h1>jQuery Selector Performance: Context vs No Context</h1>
<h2>$(".someclass")</h2>
<span id="withoutcontext">---</span> ms<br /><br />
<h2>$(".someclass", "#somecontainer")</h2>
<span id="withcontext">---</span> ms<br /><br />
<hr />
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<div id="somecontainer">
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="someclass">someclass</p>
</div>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
</body>
</html>
$("#someid") $(".someclass") $("[someattr='value']")
这三种选择那个才是最高效的?
ID查询肯定是最快的,部分原因是因为ID是唯一的,当在DOM中找到ID时API会自动停止继续查询。如果必须使用class选择器的话,可以通过自定可选的上下文参数来提高效率。
$(".someclass", "#somecontainer")
$("#someid .someclass")当时不同浏览器的运行效果却是不同的,下面是运行效果:
IE9
$(".someclass")- 2793 ms
$(".someclass", "#somecontainer")- 1481 ms
Chrome 12
$(".someclass")- 75 ms
$(".someclass", "#somecontainer")- 104 ms
Firefox 3.6
$(".someclass")- 308 ms
$(".someclass", "#somecontainer")- 357 ms
So among these big 3 modern browsers, the context parameter only seems to help IE9. Older browsers will also benefit from the context parameter. But considering the prevalence of each of these browsers and averaging everything out, the net gain is somewhat
of a wash now.
And here's the code in case anyone wants to try it themselves...
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
startTime = new Date().getTime();
for (i = 0; i < 10000; i++)
{
s = $(".someclass");
}
$("#withoutcontext").html(elapsedMilliseconds(startTime));
startTime = new Date().getTime();
for (i = 0; i < 10000; i++)
{
s = $(".someclass", "#somecontainer");
}
$("#withcontext").html(elapsedMilliseconds(startTime));
});
function elapsedMilliseconds(startTime)
{
var n = new Date();
var s = n.getTime();
var diff = s - startTime;
return diff;
}
</script>
</head>
<body>
<h1>jQuery Selector Performance: Context vs No Context</h1>
<h2>$(".someclass")</h2>
<span id="withoutcontext">---</span> ms<br /><br />
<h2>$(".someclass", "#somecontainer")</h2>
<span id="withcontext">---</span> ms<br /><br />
<hr />
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<div id="somecontainer">
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="someclass">someclass</p>
</div>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
</body>
</html>
相关文章推荐
- jQuery.attr() 函数详解
- jquery datatable
- jquery1.9以上 动态生成元素 live和on失效的解决方法
- jQuery Mobile 学习三
- jQuery弹出层始终垂直居中相对于屏幕或当前窗口
- JQuery EasyUI combobox 省市两级联动
- 基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
- jquery easyui的datagrid在初始化的时候会请求两次URL?
- 前端程序员应该知道的 15 个 jQuery 小技巧
- jQuery源码学习8——工具方法之init
- 基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
- 基于jquery实现简单的手风琴特效
- jQuery插件实现无缝滚动特效
- Jquery ajax加载等待执行结束再继续执行下面代码操作
- PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
- 总结-jQuery
- Jquery DataTable
- firedebug调试Jquery
- JQuery EasyUI combobox动态添加option
- JQuery datepicker