编程语言
首页 > 编程语言> > javascript-JSPerf测试结果随着测试运行而变慢?

javascript-JSPerf测试结果随着测试运行而变慢?

作者:互联网

背景:因此,我正在尝试进行测试,以查看使用jQuery的on.()绑定“ click”事件的三种方法的性能差异.我看到了一些很大的差异(比我预期的要大得多),当同事运行结果时,他注意到,如果您切换测试运行的顺序,结果将发生变化,但同样“不合时宜”.

因此,我决定进行一个非常简单的测试:

1)一位父母< div>包含100个子< div&gt ;,每个子&div s都只是一个简单的内部数字(1-100)和类值“ target-element”. 2)每个元素都有一个单击事件绑定到它,使用此方法:

$(".target-element", "#context1").on("click", logClick);

3)click事件只是将文本值设置为局部变量:

function logClick() {
     var sTextVal = $(this).text();
}

4)然后,我设置了一个“触发”函数来调用所有子< div&s s上的点击:

function triggerClicks(context) {
    $(context).find(".target-element").each(function() {
        $(this).click();
    });
});

5)然后,我设置了3个测试运行,都称为EXACT相同的测试:

运行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

Firefox 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

IE 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的严重错误吗?

解决方法:

如果您查看表单中“准备代码”字段旁边的帮助文本:

runs before each clocked test loop, outside of the timed code region

这意味着代码在每个测试用例之前运行,而不仅仅是一次.因此,在第二个测试用例中,每个元素将有两个事件处理程序,而在第三个测试用例中将有三个.

这就是在准备字段正下方有一个“拆卸”字段的原因:应该使用它来撤消您在设置中所做的操作,以避免出现这种情况.如果将此添加到拆解中:

$(".target-element", "#context1").off("click");

那么在添加新事件处理程序之前,将删除现有事件处理程序,并且测试需要大约相同的时间来运行.

Updated version here.

标签:jsperf,javascript,jquery
来源: https://codeday.me/bug/20191120/2045245.html