背景:所以,我试图做一个测试,看看三种使用 jQuery 绑定“点击”事件的方法的性能差异on.()
。我看到了一些相当大的差异(比我预期的要大),当一位同事运行结果时,他注意到,如果你改变测试运行的顺序,结果会改变,但同样“不正常”。
所以,我决定做一个非常简单的测试:
1) 一个<div>
包含 100 个子元素<div>
的父元素,每个子元素都只有一个内部数字 (1-100) 和class
值“目标元素”。
2)每个元素都有一个click
绑定到它的事件,使用这个:
$(".target-element", "#context1").on("click", logClick);
3)click
事件只是将文本值设置为局部变量:
function logClick() {
var sTextVal = $(this).text();
}
4)然后,我设置了一个“触发”函数来调用所有孩子<div>
的点击:
function triggerClicks(context) {
$(context).find(".target-element").each(function() {
$(this).click();
});
});
5)然后,我设置了 3 个测试运行,它们都调用了完全相同的测试:
运行 1 --->triggerClicks("#context1");
运行 2 --->triggerClicks("#context1");
运行 3 --->triggerClicks("#context1");
你可以在这里看到测试:http: //jsperf.com/jsperf-perf-test
在我测试的所有浏览器中,结果都大不相同,随着运行的继续,速度越来越慢:
铬 41
Run 1 ---> 59.91 Ops/sec (±6.55%) - fastest
Run 2 ---> 32.72 Ops/sec (±5.06%) - 45% slower
Run 3 ---> 23.69 Ops/sec (±3.39%) - 59% slower
火狐 36
Run 1 ---> 52.69 Ops/sec (±10.21%) - fastest
Run 2 ---> 26.70 Ops/sec (±6.38%) - 48% slower
Run 3 ---> 15.95 Ops/sec (±24.55%) - 73% slower
即 9
Run 1 ---> 26.98 Ops/sec (±14.43%) - fastest
Run 2 ---> 11.77 Ops/sec (±8.89%) - 54% slower
Run 3 ---> 7.54 Ops/sec (±6.85%) - 70% slower
那么我在这里错过了什么?我意识到这是一个重复性测试,并且正在处理很多元素,但这不应该对运行结果产生太大影响。任何人都可以看到为什么会由于我的代码而不是 JSPerf 出现严重问题而发生这种情况的任何原因吗?