Skip to content

Commit 90ca003

Browse files
refactor(site): simplify runtime weaknesses and remove redundant bench summary cards
1 parent cd5ab79 commit 90ca003

2 files changed

Lines changed: 9 additions & 56 deletions

File tree

site/components/BenchStandings.jsx

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,6 @@ import { isHigherBetter } from "../src/metric-direction.js";
1313
const ORDER = ["esrun", "bun", "node", "deno", "llrt"];
1414
const LABELS = { esrun: "esrun", bun: "Bun", node: "Node.js", deno: "Deno", llrt: "LLRT" };
1515

16-
// Short, neutral production notes so devs can pick for their needs.
17-
const NOTES = [
18-
{
19-
rt: "esrun",
20-
best: "A standards-first runtime (V8, built on Rust): runs ESM against the full WinterTC Web-platform API (fetch, URL, streams, WebCrypto, encoding, timers). Notably fast cold start, low memory, and strong WebCrypto — a good fit for quick-starting, standards-based scripts and services.",
21-
watch: "ESM-only — no CommonJS, no node: builtins, no Node API — so it's not a drop-in for npm/Node apps. Single-threaded HTTP, and it's a runner, not a toolchain (no bundler/installer/test runner). Young.",
22-
},
23-
{
24-
rt: "bun",
25-
best: "Speed-first all-in-one (runtime + bundler + test + package manager) on JavaScriptCore. High HTTP/script throughput, great dev velocity, largely Node-compatible.",
26-
watch: "Younger ecosystem with occasional Node-compat edge cases; maturing fast but less battle-proven than Node for the long tail.",
27-
},
28-
{
29-
rt: "node",
30-
best: "The mature default: vast npm ecosystem, full Node API, proven at every scale, the deepest tooling/observability and hiring pool.",
31-
watch: "Heavier cold start and memory; not ideal for ultra-low-latency serverless or minimal edge footprints.",
32-
},
33-
{
34-
rt: "deno",
35-
best: "Secure-by-default and TypeScript-native, Web-standard APIs with batteries-included tooling (fmt/lint/test). Strong for edge (Deno Deploy) and greenfield TS.",
36-
watch: "Some npm packages need compat shims; ecosystem smaller than Node's.",
37-
},
38-
{
39-
rt: "llrt",
40-
best: "AWS's QuickJS runtime tuned for Lambda: tiny memory and near-instant cold start where per-invocation cost dominates.",
41-
watch: "No JIT (slow on compute/JSON/long-running work), partial Web/Node APIs, no general HTTP server; experimental. A serverless specialist, not a server.",
42-
},
43-
];
4416

4517
function medalHead(p) {
4618
if (p === 1) return "🥇";
@@ -128,25 +100,9 @@ export default function BenchStandings() {
128100
Across {metrics.length} comparable metrics, each ranked by its own better
129101
direction. Each runtime is ranked only on metrics it can run, so totals
130102
differ — e.g. LLRT has no HTTP server or filesystem here. Place counts are
131-
not a ranking: more 1st-place finishes does not mean “best overall.” Pick
132-
by fit (see below).
103+
not a ranking: more 1st-place finishes does not mean “best overall.”
133104
</p>
134105

135-
<div className="mt-6 space-y-4">
136-
{NOTES.map((note) => (
137-
<div className="rounded-xl border border-zinc-200 bg-white p-5">
138-
<div className="text-base font-semibold text-zinc-900">{LABELS[note.rt]}</div>
139-
<p className="mt-2 text-[15px] leading-relaxed text-zinc-700">
140-
<span className="font-semibold text-emerald-700">✅ Best for: </span>
141-
{note.best}
142-
</p>
143-
<p className="mt-2 text-[15px] leading-relaxed text-zinc-700">
144-
<span className="font-semibold text-amber-700">⚠️ Watch out: </span>
145-
{note.watch}
146-
</p>
147-
</div>
148-
))}
149-
</div>
150106
</div>
151107
);
152108
}

site/components/WhyChooseSection.jsx

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export default function WhyChooseSection() {
66
Why ESRun?
77
</h2>
88
<p className="mt-4 text-lg text-zinc-600 max-w-2xl mx-auto">
9-
Compare how different runtimes behave when deployed to your server instance.
9+
A transparent look at the strengths and architectural compromises of the JS server-side ecosystem.
1010
</p>
1111
</div>
1212

@@ -37,8 +37,7 @@ export default function WhyChooseSection() {
3737
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Largest package ecosystem</li>
3838
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Deep native addon support</li>
3939
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Battle-tested stability</li>
40-
<li className="flex items-start gap-2"><span className="text-red-400 font-bold shrink-0"></span> Elevated idle memory footprint</li>
41-
<li className="flex items-start gap-2"><span className="text-red-400 font-bold shrink-0"></span> Legacy API (CommonJS) baggage</li>
40+
<li className="flex items-start gap-2"><span className="text-red-400 font-bold shrink-0"></span> Lower baseline throughput</li>
4241
</ul>
4342
</div>
4443
</div>
@@ -62,10 +61,9 @@ export default function WhyChooseSection() {
6261
</div>
6362
<ul className="mt-2 text-[13px] text-zinc-400 space-y-3 relative z-10 leading-relaxed">
6463
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Secure by default</li>
65-
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Built-in TypeScript support</li>
66-
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Native standard library</li>
67-
<li className="flex items-start gap-2"><span className="text-red-400 font-bold shrink-0"></span> Custom namespace fragmentation</li>
68-
<li className="flex items-start gap-2"><span className="text-red-400 font-bold shrink-0"></span> Heavy isolate initialization</li>
64+
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Native capability gating</li>
65+
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Unified standard library</li>
66+
<li className="flex items-start gap-2"><span className="text-red-400 font-bold shrink-0"></span> Smaller ecosystem and adoption</li>
6967
</ul>
7068
</div>
7169
</div>
@@ -87,10 +85,9 @@ export default function WhyChooseSection() {
8785
</div>
8886
<ul className="mt-2 text-[13px] text-zinc-400 space-y-3 relative z-10 leading-relaxed">
8987
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Exceptional JIT performance</li>
90-
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Integrated bundler & test runner</li>
91-
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Node.js API compatibility</li>
92-
<li className="flex items-start gap-2"><span className="text-red-400 font-bold shrink-0"></span> Aggressive memory peaks</li>
93-
<li className="flex items-start gap-2"><span className="text-red-400 font-bold shrink-0"></span> Memory safety regressions</li>
88+
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> High-throughput HTTP engine</li>
89+
<li className="flex items-start gap-2"><span className="text-green-500 font-bold shrink-0"></span> Deep Node.js API compatibility</li>
90+
<li className="flex items-start gap-2"><span className="text-red-400 font-bold shrink-0"></span> Memory quirks</li>
9491
</ul>
9592
</div>
9693
</div>

0 commit comments

Comments
 (0)