종합 결과 요약 (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