deno.com
本页内容

使用 Deno bench 进行基准测试

视频描述 跳转到标题

deno bench 是 Deno 运行时自带的一款易于使用的基准测试工具。以下是三种提升您使用 deno bench 水平的方法。

文字稿和代码 跳转到标题

大家好,我是来自 Deno 的 Andy,今天我们将讨论 deno bench。本视频是我们Deno 工具链系列的延续。

deno bench 是一款基准测试工具,可以轻松测量性能,如果您来自 Node,deno bench 可以为您省去寻找和集成第三方基准测试工具的时间。

基线汇总 跳转到标题

今天我们将介绍 deno bench 的一些很酷的用例。大多数时候,我们会想对完成相同任务的两种或更多方式进行基准测试,这里我们比较了从字符串解析 URL、解析带路径的 URL,以及解析带路径和 URL 对象的 URL。

main_bench.ts
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。

main_bench.ts
Deno.bench("url parsing", { baseline: true }, () => {
  new URL("https://deno.land");
});

...etc

当我们运行它时,输出底部现在有一个汇总部分,它精确地显示了基准测试与基线相比快了多少。

如果您想在同一个文件中进行多个基准测试,可以使用 group 选项来组织输出。如果我们为文本分割添加第四个基准测试并运行文件,我们将看到所有结果都分组在一起,这不是很 H helpful。相反,我们可以为 URL 基准测试添加一个 url 组,为文本基准测试添加一个 text 组。

main_bench.ts
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 行!

file_bench.ts
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() 函数。

file_bench.ts
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 文档。还有一些您可以传递的其他选项,例如 onlyignore

示例页面 和我们的 YouTube 频道上查找更多视频。

您找到所需内容了吗?

隐私政策