我知道正式的描述:
Setup:为测试创建预期状态。 Teardown:做必要的清理操作.
然而,为什么这是必要的,特别是在Benchmark.js中?为什么需要不同的测试周期(如Benchmark.js在这文章中所定义的)?我观察到,在所有我能想到的情况下(在所有其他情况下也是如此),您只需将设置代码移动到准备代码(基准/测试之外的代码),或者将删除代码移到代码的末尾,功能基本上是相同的(我也看过几个jsperf.com测试,据我所知,它们也是如此)。
例如,下面是我创建的一个基准测试,这个版本使用的是设置和删除:
const bench = new Benchmark(
'TicTacToeBenchmark',
// The function to test
() => {
ticTacToe.addEvent(
'turn',
player => {
turnText.innerHTML =
'It\'s ' + (player['id'] === 1 ? 'X' : 'O') + '\'s turn.';
}
);
},
{
'setup': () => {
const players = [
{
char: '✕',
className: 'playerX',
id: 1,
},
{
char: '◯',
className: 'playerY',
id: 2,
},
];
const ticTacToe = new TicTacToe(3, players);
}
}
);
bench.run();
console.log(bench); // 'mean' is 5e-7 seconds除了在页面的其余部分声明测试所需的所有内容外,其他示例都声明了测试所需的一切:
const players = [
{
char: '✕',
className: 'playerX',
id: 1,
},
{
char: '◯',
className: 'playerY',
id: 2,
},
];
const ticTacToe = new TicTacToe(3, players);
const bench = new Benchmark(
'TicTacToeBenchmark',
// The function to test
() => {
ticTacToe.addEvent(
'turn',
player => {
turnText.innerHTML =
'It\'s ' + (player['id'] === 1 ? 'X' : 'O') + '\'s turn.';
}
);
}
);
bench.run();
console.log(bench); // 'mean' is 7e-7 seconds也许在单元测试中,两者的区别更明显?我不知道。你能提供几个不同的案例吗?或者解释为什么测试必须在循环内运行的迭代中运行(本质上,就像两个循环,循环是外部循环)?
我在网上找到的关于这个主题的所有内容基本上都是对不同措辞的设置和Teardown定义的重复,不幸的是,这个主题没有维基百科条目。
发布于 2020-04-29 06:43:18
安装和拆卸是将代码放在(1)需要在要对其进行基准测试的函数之前或之后运行的代码,但是(2)不希望包含在基准测试的度量中。
例如,假设您有一个文本搜索库。用法如下:
searchEngine = new New SearchEngine(pathToLargeCorpusOfText)searchEngine.search(queryString)searchEngine.close() -释放内存如果您希望隔离地对search()方法进行基准测试,即不影响结果的(1)和(3),则分别将它们放在安装程序和拆卸中。
要准确地对函数进行基准测试,必须多次运行它。Benchmark.js每个周期运行多个迭代(一个search()调用),并为每个基准运行多个循环。我无法比马蒂亚斯·拜恩斯( Mathias )和约翰·大卫·道尔顿(John)的作者更好地解释原因。
https://stackoverflow.com/questions/50471459
复制相似问题