Elysia.js i Bun 2024
Elysia (370k req/s, end-to-end types), Hono (multi-runtime), Bun 1.x (runtime + bundler) i vs Fastify/NestJS.
6 frameworków backend TypeScript — speed i kiedy
Elysia, Hono, Fastify, NestJS, Express i H3 — runtime, prędkość i zastosowanie.
| Framework | Runtime | Speed | Kiedy |
|---|---|---|---|
| Elysia.js | Bun only | ~370k req/s | Bun + max speed + end-to-end types |
| Hono | Bun, Deno, Cloudflare, Node | ~250k req/s (Bun) | Edge computing, multi-runtime, Cloudflare Workers |
| Fastify | Node.js | ~180k req/s | Node.js produkcja, duży ekosystem |
| NestJS | Node.js | ~60k req/s | Enterprise, DI, Angular-like, duże zespoły |
| Express 5 | Node.js | ~60k req/s | Legacy, migracja, prostota |
| H3 + Nitro | Node, Edge, Workers | ~200k req/s | Nuxt 3 backend, universal runtime |
Często zadawane pytania
Elysia.js — ultra-szybki framework TypeScript dla Bun?
Elysia: saltyaom. Framework TypeScript dla Bun. End-to-end type safety. Fastest JS framework (benchmarki 2024). Instalacja: bun create elysia my-app. Podstawy: import {Elysia} from 'elysia'. const app = new Elysia().get('/', () => 'Hello').post('/user', ({body}) => body).listen(3000). Porównanie wydajności: Elysia: 370k req/s. Fastify: 180k req/s. Express: 60k req/s. Hono (Bun): 250k req/s. Powód: Bun runtime + Elysia optymalizacje. Type inference end-to-end: Route params, body, query — wszystko typed. VS Code autocomplete. Walidacja wbudowana w typy. Request Context: ({body, query, params, headers, cookie, set, request}). set.status — ustaw status code. set.headers — ustaw nagłówki. Route Params: .get('/user/:id', ({params: {id}}) => getUserById(id)). id: string automatycznie. Query: .get('/search', ({query: {q}}) => search(q)). q: string automatycznie. Post z body: .post('/user', ({body}) => createUser(body), {body: t.Object({name: t.String(), email: t.String()})}). Walidacja + typy. Eden Treaty (klient): import {treaty} from '@elysiajs/eden'. const client = treaty(app). const {data, error} = await client.user.get(). Fully typed client. Jak tRPC bez schema definicji.
Elysia plugins i ekosystem — JWT, CORS, Swagger?
Elysia plugin system: .use(plugin). Chain-able. Type-safe plugins. Oficjalne pluginy: @elysiajs/bearer — Bearer token. @elysiajs/cors — CORS middleware. @elysiajs/cron — CRON jobs. @elysiajs/html — JSX/HTML responses. @elysiajs/jwt — JWT auth. @elysiajs/static — static files. @elysiajs/swagger — OpenAPI docs. @elysiajs/trpc — tRPC adapter. JWT: import {jwt} from '@elysiajs/jwt'. const app = new Elysia().use(jwt({name: 'jwt', secret: 'secret'})).post('/sign', async ({jwt, body}) => await jwt.sign(body)).get('/profile', async ({jwt, headers: {Authorization}}) => { const profile = await jwt.verify(Authorization.split(' ')[1]). return profile }). CORS: .use(cors({origin: 'https://myapp.com', credentials: true})). Swagger: .use(swagger()). Automatyczny OpenAPI z typów! /swagger UI dostępne. Elysia.macro: custom macro dla reuse logiki. const app = new Elysia().macro(({onBeforeHandle}) => ({isAuth(value: boolean) { if (!value) return. onBeforeHandle(async ({jwt, headers, error}) => { if (!headers.authorization) return error(401) }) }})).get('/secret', () => 'secret', {isAuth: true}). Scope: plugins mają własny zakres. Nie przeciekają do rodzica. import {Elysia} from 'elysia'. export const userPlugin = new Elysia({prefix: '/user'}).get('/', () => 'all users').get('/:id', ({params}) => params.id). const app = new Elysia().use(userPlugin). Prefix automatyczny.
Hono vs Elysia vs Fastify — który framework backend TypeScript 2024?
Hono: Yusuke Wada. Multi-runtime: Bun, Deno, Cloudflare Workers, Node.js. Web Standards API. Instalacja: bun add hono. Lub npm install hono (Node). Hono middleware: import {Hono, Context} from 'hono'. const app = new Hono(). app.get('/hello', (c: Context) => c.text('Hello')). Hono adapters: app.fire() — Cloudflare Workers. serve(app) — Bun/Node. Hono z Cloudflare: plik index.ts. export default app. wrangler deploy. Idealny dla edge. Hono RPC: hono/client — typed client jak Eden. Walidacja: zod-validator, valibot-validator dla Hono. Fastify: Matteo Collina. JSON Schema validation. Fast serialization. TypeScript-first od v4. Plugins ecosystem: fastify-cors, @fastify/jwt, fastify-swagger. Produkcja-ready. Express 5: finally async/await native. Brak callback hell. Ale nadal wolny. Kiedy co: Elysia — Bun full-stack, end-to-end types, max speed. Hono — edge computing, multi-runtime, Cloudflare Workers. Fastify — Node.js produkcja, ekosystem, monitorowanie. NestJS — enterprise, Angular-like DI, duże zespoły. Express 5 — legacy projekty, powoli migruj. Serwer vs edge: Fastify/NestJS — serwer, pełna Node.js. Hono — edge + serwer. Elysia — tylko Bun (na razie).
Bun 1.x — runtime, APIs i co różni od Node.js?
Bun 1.0 stable (2023-09). Bun: Jarred Sumner. JS runtime + bundler + test runner + package manager. Cel: najszybszy JS toolkit. Bun APIs: Bun.serve() — HTTP server: const server = Bun.serve({port: 3000, fetch(req) { return new Response('Hello') }}). Bun.file() — file reading: const file = Bun.file('data.txt'). const text = await file.text(). Bun.write() — file writing: await Bun.write('out.txt', 'content'). Bun.password: const hash = await Bun.password.hash('password'). const ok = await Bun.password.verify('password', hash). SQLite wbudowane: import {Database} from 'bun:sqlite'. const db = new Database('mydb.sqlite'). db.run('CREATE TABLE IF NOT EXISTS users (id INT, name TEXT)'). const users = db.query('SELECT * FROM users').all(). WebSockets: server.upgrade(req). const server = Bun.serve({websocket: {message(ws, msg) { ws.send(msg) }, open(ws) { ws.send('Hello') }}}). Test runner: import {test, expect} from 'bun:test'. test('adds', () => { expect(1 + 1).toBe(2) }). bun test — szybszy niż jest/vitest. Node.js kompatybilność: Bun implementuje Node APIs. require(), process, Buffer, __dirname. Większość Node.js libs działa. Nie 100% — sprawdź. Bun vs Node.js prędkość: Bun install: 4x szybszy niż npm. Bun run: 2-4x szybszy startup. HTTP: 2x szybszy throughput. Sqlite: 3x szybszy. Kiedy Bun: nowy projekt. Serverless functions. CLI tools. Elysia + Bun stack.
Elysia i Bun w produkcji — deployment, monitoring i best practices?
Deployment Elysia + Bun: Docker: FROM oven/bun:1. WORKDIR /app. COPY package.json bun.lockb ./. RUN bun install --frozen-lockfile. COPY . .. CMD ['bun', 'run', 'src/index.ts']. Multi-stage build: FROM oven/bun AS builder. RUN bun build src/index.ts --outfile=app.js --target=bun. FROM oven/bun AS runner. COPY --from=builder /app/app.js .. CMD ['bun', 'app.js']. Fly.io: fly launch — automatycznie wykrywa Bun. Railway: Bun support wbudowany. Render: Bun support. Coolify (self-host): Bun support. Monitoring: Bun nie ma Express middleware ecosystem. Pino logger: bun add pino. Logger middleware: app.use(({request, set}) => { logger.info({method: request.method, url: request.url}) }). OpenTelemetry z Elysia: @elysiajs/opentelemetry plugin. Traces + metrics. Health check: .get('/health', () => ({status: 'ok', uptime: process.uptime()})). Graceful shutdown: process.on('SIGTERM', () => { server.stop(). process.exit(0) }). Rate limiting: @elysiajs/rate-limit plugin. Lub własna logika. Error handling: .onError(({code, error, set}) => { if (code === 'VALIDATION') { set.status = 400. return {message: error.message} }. return error }). Onion model: Elysia lifecycle: request, parse, transform, beforeHandle, handler, afterHandle, mapResponse, afterResponse, error. Middleware jako plugin best practice. Test: bun test. Elysia eden jest też typowany w testach.
Powiązane artykuły
Skontaktuj się z nami
Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.
Wyślij zapytanie
Telefon
+48 790 814 814
Pon-Pt: 9:00 - 18:00
adam@fotz.pl
Odpowiadamy w ciągu 24h
Adres
Plac Wolności 16
61-739 Poznań
Godziny pracy
Wolisz porozmawiać?
Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.
Zadzwoń teraz