diff options
author | 2023-01-23 05:22:03 -0800 | |
---|---|---|
committer | 2023-01-23 05:22:03 -0800 | |
commit | 9a2b586337ed2807c586821ce2402513d9d35b74 (patch) | |
tree | 937100f9eb332d6ad01c7dfc87ac1844f749cf5e /bench | |
parent | df999306c0c917f2be68246dcffa230005a6a653 (diff) | |
download | bun-9a2b586337ed2807c586821ce2402513d9d35b74.tar.gz bun-9a2b586337ed2807c586821ce2402513d9d35b74.tar.zst bun-9a2b586337ed2807c586821ce2402513d9d35b74.zip |
Update bench
Diffstat (limited to 'bench')
-rw-r--r-- | bench/snippets/transpiler.mjs | 146 |
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(); |