aboutsummaryrefslogtreecommitdiff
path: root/bench
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-23 05:22:03 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-23 05:22:03 -0800
commit9a2b586337ed2807c586821ce2402513d9d35b74 (patch)
tree937100f9eb332d6ad01c7dfc87ac1844f749cf5e /bench
parentdf999306c0c917f2be68246dcffa230005a6a653 (diff)
downloadbun-9a2b586337ed2807c586821ce2402513d9d35b74.tar.gz
bun-9a2b586337ed2807c586821ce2402513d9d35b74.tar.zst
bun-9a2b586337ed2807c586821ce2402513d9d35b74.zip
Update bench
Diffstat (limited to 'bench')
-rw-r--r--bench/snippets/transpiler.mjs146
1 files changed, 95 insertions, 51 deletions
diff --git a/bench/snippets/transpiler.mjs b/bench/snippets/transpiler.mjs
index 6872d88b7..1527d0d52 100644
--- a/bench/snippets/transpiler.mjs
+++ b/bench/snippets/transpiler.mjs
@@ -1,58 +1,102 @@
import { readFileSync } from "fs";
+import { dirname } from "path";
+import { fileURLToPath } from "url";
+import { bench, run, group } from "mitata";
+import { createRequire } from "module";
+const require = createRequire(import.meta.url);
+const esbuild_ = require("esbuild/lib/main");
+const swc_ = require("@swc/core");
+const babel_ = require("@babel/core");
-var transformSync;
-var transform;
-var opts;
-if (process.isBun) {
- const transpiler = new Bun.Transpiler({ loader: "jsx" });
- transformSync = transpiler.transformSync.bind(transpiler);
- transform = transpiler.transform.bind(transpiler);
- opts = "jsx";
-} else if (process.env["esbuild"]) {
- try {
- const esbuild = await import("esbuild");
- transformSync = esbuild.transformSync;
- transform = esbuild.transform;
- opts = { loader: "jsx" };
- } catch (exception) {
- throw exception;
- }
-} else if (process.env["swc"]) {
- try {
- const swc = await import("@swc/core");
- transformSync = swc.transformSync;
- transform = swc.transform;
- opts = {
- sourceMaps: false,
- inlineSourcesContent: false,
- jsc: {
- target: "es2022",
- parser: {
- jsx: true,
+const code = readFileSync(
+ dirname(fileURLToPath(import.meta.url)) +
+ "/../../src/test/fixtures/simple.jsx",
+ "utf-8",
+);
+
+async function getWithName(name) {
+ let transformSync;
+ let transform;
+ let opts;
+
+ if (name === "bun") {
+ const transpiler = new Bun.Transpiler({ loader: "jsx" });
+ transformSync = transpiler.transformSync.bind(transpiler);
+ transform = transpiler.transform.bind(transpiler);
+ opts = "jsx";
+ } else if (name === "esbuild") {
+ try {
+ transformSync = esbuild_.transformSync;
+ transform = esbuild_.transform;
+ opts = { loader: "jsx" };
+ } catch (exception) {
+ throw exception;
+ }
+ } else if (name === "swc") {
+ try {
+ transformSync = swc_.transformSync;
+ transform = swc_.transform;
+ opts = {
+ sourceMaps: false,
+ inlineSourcesContent: false,
+ jsc: {
+ target: "es2022",
+ parser: {
+ jsx: true,
+ },
},
- },
- };
- } catch (exception) {
- throw exception;
- }
-} else if (process.env["babel"]) {
- try {
- const swc = await import("@babel/core");
- transformSync = swc.transformSync;
- transform = swc.transform;
- opts = {
- sourceMaps: false,
- presets: [(await import("@babel/preset-react")).default],
- };
- } catch (exception) {
- throw exception;
+ };
+ } catch (exception) {
+ throw exception;
+ }
+ } else if ("babel") {
+ try {
+ transformSync = babel_.transformSync;
+ transform = babel_.transform;
+ opts = {
+ sourceMaps: false,
+ presets: ["@babel/preset-react"],
+ };
+ } catch (exception) {
+ throw exception;
+ }
}
+
+ return {
+ transformSync,
+ transform,
+ opts,
+ name,
+ };
}
-const code = readFileSync("src/test/fixtures/simple.jsx", "utf8");
+const bun = process.isBun ? await getWithName("bun") : null;
+const esbuild = await getWithName("esbuild");
+const swc = await getWithName("swc");
+const babel = await getWithName("babel");
-if (process.env.ASYNC) {
- console.log(await transform(code, opts));
-} else {
- console.log(transformSync(code, opts));
-}
+const transpilers = [bun, esbuild, swc, babel].filter(Boolean);
+
+group("transformSync (" + ((code.length / 1024) | 0) + " KB jsx file)", () => {
+ for (let { name, transformSync, opts } of transpilers) {
+ bench(name, () => {
+ transformSync(code, opts);
+ });
+ }
+});
+
+group("tranform x 5", () => {
+ for (let { name, transform, opts } of transpilers) {
+ bench(name, async () => {
+ return Promise.all([
+ transform(code, opts),
+ transform(code + "\n", opts),
+ transform("\n" + code + "\n", opts),
+ transform("\n" + code + "\n\n", opts),
+ transform("\n\n" + code + "\n\n", opts),
+ ]);
+ });
+ }
+});
+
+await run();