01Üç runtime, üç felsefeThree runtimes, three philosophies
Node bugün "sıkıcı varsayılan" — ve bu bir övgü. npm'deki dev ekosistem, öngörülebilir LTS takvimi, her sorunun bir yerde cevaplanmış olması ve açık ara en geniş işe alım havuzu. Üstelik yerinde saymıyor: fetch artık built-in, node:test ile native test runner var, watch mode geldi, ESM meselesi büyük ölçüde oturdu. "Node eskidi" argümanı 2026'da zayıf bir argüman.
Node is today's "boring default" — and that's a compliment. The huge npm ecosystem, a predictable LTS schedule, every question already answered somewhere, and by far the widest hiring pool. It isn't standing still either: fetch is built in, node:test ships a native test runner, watch mode landed, and the ESM story has largely settled. "Node is outdated" is a weak argument in 2026.
Bun hızı ürünleştirdi: hızlı başlangıç, hızlı install ve tek binary'de gelen bundler, test runner ve package manager. Projeye başlarken dört araç yerine bir araç kuruyorsunuz. Node uyumluluğunu hedefliyor ve çoğu projede sorunsuz — ama uç durumlarda, bazı native addon'larda ve az kullanılan Node API'lerinde sürpriz çıkabiliyor. "Çoğu zaman çalışıyor" ile "her zaman çalışıyor" arasındaki fark, üretimde büyük bir farktır.
Bun productized speed: fast startup, fast installs, and a bundler, test runner and package manager in a single binary. You install one tool instead of four. It targets Node compatibility and works fine for most projects — but edge cases, some native addons and rarely used Node APIs can still surprise you. The gap between "works most of the time" and "works every time" is a big gap in production.
Deno güvenliği öne koydu: dosyaya, ağa, environment'a erişim explicit izin ister. Web-standard API'ler ve kutudan çıkan TypeScript desteğiyle "script yaz, hemen çalıştır" deneyimi üçünün en temizi. Deno 2 ile npm uyumluluğu da ciddi şekilde iyileşti.
Deno put security first: access to files, network and environment requires explicit permission. With web-standard APIs and TypeScript out of the box, its "write a script, run it now" experience is the cleanest of the three. Deno 2 also seriously improved npm compatibility.
# Node: her şey açık, ekosistem hazır / everything allowed, ecosystem ready node server.js # Bun: aynı komut, araçlar dahil / same command, batteries included bun run server.js # Deno: izin istemek zorunda / must ask for permission deno run --allow-net=:8000 server.js
02Benchmark'lar neyi söyler, neyi söylemezWhat benchmarks do and don't tell you
Microbenchmark'lar üç şeyi iyi ölçer: cold start, "hello world" HTTP throughput ve install süresi. CLI aracı ya da kısa ömürlü process yazıyorsanız bunlar gerçekten önemlidir. Ama tipik bir API'de darboğaz runtime değildir: veritabanı sorgusu, dış servis çağrısı ve kendi kodunuzdur. İsteğin ömrünün büyük kısmı I/O beklemekle geçiyorsa, runtime değiştirerek kazanacağınız şey yuvarlama hatası mertebesindedir.
Microbenchmarks measure three things well: cold start, "hello world" HTTP throughput and install time. If you're building CLI tools or short-lived processes, those genuinely matter. But in a typical API the bottleneck isn't the runtime — it's the database query, the external service call and your own code. When most of a request's life is spent waiting on I/O, swapping runtimes buys you a rounding error.
Runtime seçimi bir performans kararı değil, bir risk kararıdır.
Choosing a runtime isn't a performance decision. It's a risk decision.
O yüzden doğru soru "hangisi daha hızlı" değil; "bu iş yükünde fark ölçülebilir mi ve bu fark, uyumluluk riskini almaya değer mi" sorusudur. Ölçmeden karar vermeyin — ve kendi kodunuzla ölçün, başkasının hello world'üyle değil.
So the right question isn't "which is faster" — it's "is the difference measurable on this workload, and is it worth the compatibility risk". Don't decide without measuring — and measure with your own code, not someone else's hello world.
03Dördüncü oyuncu: edge isolate'larThe fourth player: edge isolates
Dördüncü oyuncu aslında bir process bile değil: Cloudflare Workers'ın workerd'ı gibi V8 isolate tabanlı edge runtime'lar. Milisaniye mertebesinde cold start için tasarlandılar; karşılığında bambaşka kısıtlarla gelirler — tam Node API yok, dosya sistemi yok, CPU süresi sınırlı. Burada "runtime seçmek" aslında platform seçmektir ve geri dönüşü daha pahalıdır.
The fourth player isn't even a process: V8 isolate-based edge runtimes like Cloudflare Workers' workerd. They're designed for millisecond-scale cold starts and come with entirely different constraints — no full Node API, no filesystem, capped CPU time. Here "choosing a runtime" is really choosing a platform, and the way back is more expensive.
Pratik çıkarım şu: kodunuzun bir gün edge'de çalışma ihtimali varsa, ilk günden web-standard API'lere yaslanın — fetch, Request/Response, Web Crypto. Bu ortak dil üç runtime'da da, isolate'larda da çalışır; runtime'a özgü API'lere yaslanan kod ise taşınırken yeniden yazılır.
The practical takeaway: if your code might ever run at the edge, lean on web-standard APIs from day one — fetch, Request/Response, Web Crypto. That common language runs on all three runtimes and on isolates; code that leans on runtime-specific APIs gets rewritten when it moves.
04Bağlama göre karar rehberiA decision guide by context
Runtime tartışması soyut kaldığı sürece bitmez. Bağlamı koyunca kısalır:
The runtime debate never ends while it stays abstract. Add context and it gets short:
- Uzun ömürlü API. Node. Beş yıl yaşayacak bir servisin en değerli özelliği sürprizsizliktir: LTS, ekosistem, işe alım. Bun'a geçiş ancak ölçülmüş bir kazanç + geçen bir test suite ile savunulur.
- Long-lived API. Node. The most valuable property of a service that will live five years is the absence of surprises: LTS, ecosystem, hiring. A move to Bun is only defensible with a measured gain plus a passing test suite.
- CLI tooling. Bun ve Deno burada parlar: hızlı başlangıç hissedilir, tek dosyaya compile edip dağıtmak ikisinde de mümkün.
- CLI tooling. Bun and Deno shine here: fast startup is felt on every run, and both can compile to a single distributable binary.
- Script'ler ve otomasyon. Deno'nun izin modeli ve kutudan çıkan TypeScript'i, "internetten kopyalanan script" gerçeğine karşı iyi bir sigorta. Bun da hız ve pratiklikte güçlü.
- Scripts and automation. Deno's permission model and out-of-the-box TypeScript are good insurance against the reality of scripts copied off the internet. Bun is strong on speed and convenience too.
- Serverless / edge. Kararı çoğunlukla platform verir: hangi runtime'ı sunuyorsa o. Sizin işiniz kodu web-standard tutmak.
- Serverless / edge. The platform mostly decides: whatever runtime it offers, that's yours. Your job is keeping the code web-standard.
Gizli değişken migration maliyeti: runtime değiştirmek ücretsiz değildir. Test suite'in aday runtime'da koşulması, native dependency'lerin denetlenmesi, CI ve deploy pipeline'ının güncellenmesi, ekibin yeni araçları öğrenmesi — hepsi faturaya girer. Bu fatura ölçülmüş kazançtan büyükse cevap bellidir. Ve emin değilseniz: Node. Bu heyecansız bir cevap; üretim sistemleri için heyecansızlık bir özelliktir.
The hidden variable is migration cost: switching runtimes isn't free. Running your test suite on the candidate, auditing native dependencies, updating CI and the deploy pipeline, teaching the team new tools — it all goes on the bill. If that bill exceeds the measured gain, the answer is obvious. And when in doubt: Node. It's an unexciting answer; for production systems, unexciting is a feature.
