웹소켓(WebSocket) 서버를 한 쌍의 클라이언트가 주고받는 메시지로 시험한 결과, Node.js 26은 uWebSockets.js를 사용할 때 초당 4만9,000회의 왕복을 기록해 Bun 1.4.2와 Deno 2.9.7보다 높은 처리량을 보였다. 다만 시험은 단일 서버 코어와 로컬 루프백 환경에서 진행한 핑퐁 테스트로, 결과는 이 조건에 한정된다.

시험은 클라이언트 1이 서버에 메시지를 보내면 서버가 클라이언트 2에 전달하고, 클라이언트 2의 응답을 다시 서버를 거쳐 클라이언트 1에 보내는 방식이다. 서버가 메시지를 주고받는 왕복 횟수와 왕복당 시간의 중앙값·99백분위수를 측정했다. 비교 대상은 C로 작성한 중계 서버, Node.js 26과 C++ 네이티브 애드온인 uWebSockets.js, Bun 1.4.2의 내장 서버 Bun.serve, Deno 2.9.7의 내장 서버 Deno.serve다.

서버초당 왕복 횟수중앙값 (µs)99백분위수 (µs)
C 중계 서버(기준)54,00018.423.0
Node.js 26 + uWebSockets.js49,00020.424.8
Deno 2.9.7 + Deno.serve40,00025.032.0
Bun 1.4.2 + Bun.serve37,00026.846.4

시험은 Intel Xeon Gold 6548N(Emerald Rapids)을 탑재한 리눅스 서버에서 실행했다. 모든 통신은 루프백 인터페이스를 통해 로컬에서 이뤄졌다. 서버 프로세스는 단일 코어를 사용하도록 제한했고, 클라이언트는 다른 코어에서 실행했다. 전체 벤치마크를 세 차례 반복했으며 결과는 몇 퍼센트 이내에서 안정적이었다.

글쓴이는 이 시험에서 자바스크립트 웹소켓 서버가 단순한 C 서버에 근접할 수 있었고, Node.js와 uWebSockets.js 조합이 Bun·Deno보다 빠르게 나타났다고 설명했다. 이어 세 런타임에서 같은 핑퐁 시험을 자바스크립트 패키지 ws 8.22.0으로 반복했다.

서버초당 왕복 횟수중앙값 (µs)99백분위수 (µs)
Node.js 26 + ws45,00021.731.5
Bun 1.4.2 + ws41,00022.536.9
Deno 2.9.7 + ws34,00029.645.9

ws를 사용한 시험에서도 Node.js, Bun, Deno 순으로 처리량이 높았다. Node.js에서는 ws가 uWebSockets.js에 가까운 수치를 냈다(초당 4만5,000회 대 4만9,000회). Bun에서는 ws가 Bun.serve보다 높았고(4만1,000회 대 3만7,000회), Deno에서는 Deno.serve가 ws보다 높았다(4만 회 대 3만4,000회).

이전 시험에서는 Bun이 Node.js보다 두 배 빠르다는 결과가 나왔지만, 글쓴이는 서버가 메시지를 보낸 클라이언트에 그대로 되돌려 보내는 오류가 있었다고 밝혔다. 따라서 당시 측정은 왕복당 네 메시지가 아니라 두 메시지만 처리했다. 당시 자바스크립트로 작성한 클라이언트도 느린 점을 보완하기 위해 이번 시험에서는 C 클라이언트를 작성했다고 설명했다. 이번 시험의 소스 코드는 공개돼 있다.