Bun Benchmark: Runtime
commit: loading...JavaScript 런타임(Node.js · Deno · Bun)에서 같은 스크립트를 실행했을 때의 시작 시간, 연산 · I/O 처리 시간, 피크 메모리, HTTP 처리량을 비교합니다.
환경 정보를 불러오는 중...
종합 결과 요약 (Benchmark Overview)
| 런타임 | 버전 | 엔진 | 시작 시간 | Node 대비 (연산 · I/O) | HTTP (기본 API) |
|---|---|---|---|---|---|
| 데이터를 불러오는 중... | |||||
워크로드별 결과 (Workloads)
hyperfine -N 으로 프로세스 시작부터 종료까지(시작 시간
포함) 잰 값입니다. 실행 시간은 평균, 메모리는 실행 중 피크 RSS 의
최댓값입니다. 바 길이가 짧을수록 좋으며, 상대 배수는 해당 워크로드의
최솟값 기준입니다.
HTTP 처리량 (Requests / sec)
측정 환경 및 기술적 분석
측정 방식 및 재현 (Methodology)
-
측정 도구: 워크로드는
hyperfine -N(시작 시간 워밍업 3회 · 30회, 나머지 워밍업 1회 · 10회), HTTP 는oha(워밍업 2초 후 측정)를 씁니다. 메모리는 hyperfine 이 잰 피크 RSS 의 최댓값(워밍업 포함), HTTP 는 부하 직후 서버 프로세스 RSS 입니다. -
같은 코드: HTTP 서버를 뺀 모든 워크로드는 표준
JS 와
node:모듈만 쓰는 하나의 파일을 세 런타임에서 그대로 실행하고, 측정 전에 세 런타임의 출력이 같은지 먼저 확인합니다. HTTP 는 응답이 모두 200 일 때만 기록합니다. -
실행 방식:
node 파일·deno run -A 파일·bun 파일. 별도 플래그나 캐시 조작은 하지 않습니다. -
재현 명령:
bun run bench실행 시 벤치마크가 재수행되고runtime-results.json이 업데이트됩니다.
결과 해석 (Engineering Notes)
- 엔진: Node.js · Deno 는 V8(버전은 서로 다름), Bun 은 JavaScriptCore 입니다. V8 기반인 Node.js 와 Deno 는 순수 연산(재귀 · JSON · 정렬)에서 차이가 작고, Bun 과의 차이는 대부분 엔진 차이입니다.
-
TS 실행: 세 런타임 모두
.ts를 바로 실행하지만, Node.js 는 실행할 때마다 타입을 지우는 단계가 시작 시간에 더해집니다. Deno 는 변환 결과를DENO_DIR에 캐시해 워밍업 이후.js와 차이가 거의 없습니다. - 네이티브 비중이 큰 작업: 해시는 세 런타임 모두 네이티브 코드로 처리하고, 파일 I/O 는 시간 대부분이 시스템 콜(sys)이라 런타임 간 차이가 작습니다. 남는 차이는 대부분 시작 시간 차이입니다.
-
HTTP:
Deno.serve(Rust hyper) ·Bun.serve(uWebSockets) 는node:http보다 처리량이 높습니다.node:http호환 레이어는 런타임마다 구현이 달라, 같은 코드라도 결과가 기본 API 와 크게 다를 수 있습니다.
전체 측정 데이터 테이블 (Raw Benchmark Data)
| 워크로드 | 런타임 | 평균 (Mean) | 표준 편차 | 최소 | 최대 | user / sys | 피크 RSS | 상대 배수 |
|---|
| HTTP API | 런타임 | 처리량 | 지연 p50 | 지연 p99 | 성공률 | 서버 RSS |
|---|