summaryrefslogtreecommitdiff
path: root/cli/bench/fs/run.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/bench/fs/run.mjs')
-rw-r--r--cli/bench/fs/run.mjs66
1 files changed, 66 insertions, 0 deletions
diff --git a/cli/bench/fs/run.mjs b/cli/bench/fs/run.mjs
new file mode 100644
index 000000000..92471d638
--- /dev/null
+++ b/cli/bench/fs/run.mjs
@@ -0,0 +1,66 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+
+let total = 5;
+let current = "";
+const values = {};
+const runtime = typeof Deno !== "undefined" ? "deno" : "node";
+
+function bench(fun, count = 100000) {
+ if (total === 5) console.log(fun.toString());
+ const start = Date.now();
+ for (let i = 0; i < count; i++) fun();
+ const elapsed = Date.now() - start;
+ const rate = Math.floor(count / (elapsed / 1000));
+ console.log(`time ${elapsed} ms rate ${rate}`);
+ values[current] = values[current] || [];
+ values[current].push(rate);
+ if (--total) bench(fun, count);
+ else total = 5;
+}
+
+let fs;
+if (runtime === "node") {
+ fs = await import("fs");
+}
+
+const getFunction = runtime === "deno"
+ ? (name) => {
+ current = name;
+ return Deno[name];
+ }
+ : (name) => {
+ current = name;
+ return fs[name];
+ };
+
+const writeFileSync = getFunction("writeFileSync");
+writeFileSync("test", new Uint8Array(1024 * 1024), { truncate: true });
+
+const copyFileSync = getFunction("copyFileSync");
+bench(() => copyFileSync("test", "test2"), 10000);
+
+const truncateSync = getFunction("truncateSync");
+bench(() => truncateSync("test", 0));
+
+const lstatSync = getFunction("lstatSync");
+bench(() => lstatSync("test"));
+
+const { uid, gid } = lstatSync("test");
+
+const chownSync = getFunction("chownSync");
+bench(() => chownSync("test", uid, gid));
+
+const chmodSync = getFunction("chmodSync");
+bench(() => chmodSync("test", 0o666));
+
+// const cwd = getFunction("cwd");
+// bench(() => cwd());
+
+// const chdir = getFunction("chdir");
+// bench(() => chdir("/"));
+
+const readFileSync = getFunction("readFileSync");
+writeFileSync("test", new Uint8Array(1024), { truncate: true });
+bench(() => readFileSync("test"));
+
+writeFileSync(new URL(`./${runtime}.json`, import.meta.url), new TextEncoder().encode(JSON.stringify(values, null, 2)), { truncate: true }); \ No newline at end of file