Bun이 Node.js보다 훨씬 빠릅니까?

Bun은 자바스크립트 런타임 시나리오에서 새로운 멋진 아이인 것 같습니다. 매우 유망해 보이지만 그 모든 것이 그렇게 빠릅니까?

작은 규모에서도 성능 차이가 이미 눈에 띄는지 확인하기 위해 일련의 간단한 테스트를 수행할 것입니다.

오늘은 요청 성능과 초당 작업에만 집중하겠습니다.

롤빵 설정



하지만 먼저 bun 디렉토리에 bun 설치를 시작하겠습니다.

curl https://bun.sh/install | bash


그리고 기본 응답 만들기

// http.js
export default {
  port: 3000,
  fetch(request) {
    return new Response("Welcome to Bun!");
  },
};


노드 설정



이제 노드로 이동할 수 있습니다. Node.js가 이미 설치되어 있기 때문에 기본 응답도 작성해야 합니다.

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});


이제 즐길 준비가 되었습니다.

HTTP 요청 성능



HTTP 요청 성능을 위해 Artillery를 사용하여 두 가지 구현을 테스트하겠습니다.

포병은 npm을 통해 설치할 수 있습니다.

npm i artillery


그리고 빠른 부하 테스트를 실행할 수 있는 멋진 CLI가 함께 제공됩니다.

 artillery quick --count 500 --num 100 http://localhost:3000


이것은 각각 100개의 요청으로 500명의 가상 사용자를 실행합니다.

결과는 다음과 같습니다.


http
마디
혈액 요소 질소


http.codes.200
50000
50000

http.request_rate
1585/초
1617/초

http.요청
50000
50000

http.응답
50000
50000



http.response_time
마디
혈액 요소 질소



0
0

최대
143
73

중앙값
32.8
22.9

p95
63.4
36.2

p96
100.5
50.9



vusers.session_length
마디
혈액 요소 질소



1835.3
1103.1

최대
4989.2
2805.9

중앙값
3678.4
2566.3

p95
4770.6
2780

p99
4867
2780


(밀리초 단위)

결과는 Bun의 성능 주장과는 거리가 멀지만 여전히 매우 견고합니다. 모든 측면에서 Bun이 승자로 돋보입니다.

초당 작업



여기에서는 소수를 계산하는 테스트를 수행하여 각 소수에 걸리는 시간을 확인합니다.

소수 계산을 테스트하기 위해 매우 간단한 코드를 실행하고 performance.now()를 사용하여 실행 시간을 측정합니다.

(function (maxNumbers = 30000) {
  let start = performance.now();
  let primeNumbers = []
  let numberToCheck = 1;
  while (primeNumbers.length < maxNumbers) {
    if (isPrimeNumber(numberToCheck)) {
      primeNumbers.push(numberToCheck);
    }
    numberToCheck++;
  }

  console.log(performance.now() - start);
})();

function isPrimeNumber(number) {
  for (let i = 2; i < number; i++) {
    if (number % i === 0) return false;
  }
  return true;
}



소수 계산 결과는 다음과 같습니다(밀리초 단위).


소수
마디
혈액 요소 질소


100
1.035
0.618

500
4.5071
3.223

1000
9.3060
8.680

5000
209.8485
198.4309

10000
909.618
849.832

30000
9113.5302
8559.282


이번에는 결과가 그다지 다르지 않지만 Bun이 다시 이깁니다.

Bun은 아직 베타 버전이며 이를 염두에 두어야 합니다. 이 단계에서 결과가 이미 유망해 보인다면 개선이 같은 방향으로 계속된다면 흥미로운 시기가 올 것이며 아마도 몇 년 안에 Bun이 시장에서 자리를 찾을 것입니다.

좋은 웹페이지 즐겨찾기