使用 Deno bench 进行基准测试
视频描述 跳转到标题
deno bench
是 Deno 运行时自带的一款易于使用的基准测试工具。以下是三种提升您使用 deno bench 水平的方法。
文字稿和代码 跳转到标题
大家好,我是来自 Deno 的 Andy,今天我们将讨论 deno bench
。本视频是我们Deno 工具链系列的延续。
deno bench
是一款基准测试工具,可以轻松测量性能,如果您来自 Node,deno bench
可以为您省去寻找和集成第三方基准测试工具的时间。
基线汇总 跳转到标题
今天我们将介绍 deno bench
的一些很酷的用例。大多数时候,我们会想对完成相同任务的两种或更多方式进行基准测试,这里我们比较了从字符串解析 URL、解析带路径的 URL,以及解析带路径和 URL 对象的 URL。
Deno.bench("url parsing", () => {
new URL("https://deno.land");
});
Deno.bench("url parsing with path", () => {
new URL("./welcome.ts", "https://deno.land/");
});
const BASE_URL = new URL("https://deno.land");
Deno.bench("url parsing with a path and a URL object", () => {
new URL("./welcome.ts", BASE_URL);
});
然后运行
deno bench main_bench.ts
输出结果显示了每个基准测试所需的时间(以纳秒为单位),以及每秒的迭代次数。不仅如此,还包括 CPU 芯片和运行时。
结果表明第一种方法是最快的。但如果您想更清晰地显示它到底快了多少呢?我们可以将 baseline:true
选项传递给 Benchmark。
Deno.bench("url parsing", { baseline: true }, () => {
new URL("https://deno.land");
});
...etc
当我们运行它时,输出底部现在有一个汇总部分,它精确地显示了基准测试与基线相比快了多少。
如果您想在同一个文件中进行多个基准测试,可以使用 group
选项来组织输出。如果我们为文本分割添加第四个基准测试并运行文件,我们将看到所有结果都分组在一起,这不是很 H helpful。相反,我们可以为 URL 基准测试添加一个 url
组,为文本基准测试添加一个 text
组。
Deno.bench("url parsing", { baseline: true, group: "url" }, () => {
new URL("https://deno.land");
});
...etc
const TEXT = "Lorem ipsum dolor sit amet";
Deno.bench("split on whitespace", { group: "text" }, () => {
TEXT.split(" ");
});
现在您将看到我们的结果按组组织。
使用 b.start()
和 b.end()
进行更具体的基准测试 跳转到标题
您知道可以具体指定何时开始和停止测量基准测试吗?这是一个新的基准测试文件,我们计划对解析发布 markdown 文件的第一个单词进行基准测试,该文件包含了过去 5 年 Deno 运行时项目的所有发布说明。它有超过 6,000 行!
const FILENAME = "./Releases.md";
Deno.bench("get first word", () => {
const file = Deno.readTextFileSync(FILENAME);
const firstWord = file.split(" ")[0];
});
运行 deno bench
显示此操作需要很长时间,但这主要是因为基准测试需要将文件读入内存。那么我们如何只对读取第一个单词进行基准测试呢?如果我们使用 bench
context parameter
,我们可以访问 start()
和 end()
函数。
const FILENAME = "./Releases.md";
Deno.bench("get first word", (b) => {
b.start();
const file = Deno.readTextFileSync(FILENAME);
const firstWord = file.split(" ")[0];
b.end();
});
现在当我们运行 deno bench
时,您会注意到这个基准测试只测量了第一个单词的读取。
这只是 deno bench
的一个缩影,如果您想查看 Deno Bench 的其他选项,可以使用编辑器通过 ctrl+click
跳转到基准定义,或者查看 deno bench
文档。还有一些您可以传递的其他选项,例如 only
和 ignore
。