Действительно ли Bun намного быстрее Node.js?

Похоже, что Bun — это новый крутой парень в сценарии выполнения javascript. Выглядит очень многообещающе и все такое, но так ли он быстр?

Я проведу ряд простых тестов, чтобы посмотреть, заметна ли разница в производительности даже на небольшом уровне.

Сегодня я сосредоточусь только на производительности запросов и операций в секунду.

Установка Bun

Но сначала я начну установку bun в директорию bun.

curl https://bun.sh/install | bash
Вход в полноэкранный режим Выйти из полноэкранного режима

И создадим базовый ответ

// http.js
export default {
  port: 3000,
  fetch(request) {
    return new Response("Welcome to Bun!");
  },
};
Войти в полноэкранный режим Выйти из полноэкранного режима

Настройка узла

Теперь я могу перейти к node. Поскольку у меня уже установлен 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.

Artillery можно установить через npm

npm i artillery
Войти в полноэкранный режим Выйти из полноэкранного режима

И поставляется с хорошим CLI для выполнения быстрого нагрузочного теста.

 artillery quick --count 500 --num 100 http://localhost:3000
Вход в полноэкранный режим Выйти из полноэкранного режима

Это позволит запустить 500 виртуальных пользователей со 100 запросами каждый.

Результаты следующие:

http узел булочка
http.codes.200 50000 50000
http.request_rate 1585/сек 1617/сек
http.requests 50000 50000
http.responses 50000 50000
http.response_time Узел Булочка
min 0 0
max 143 73
медиана 32.8 22.9
p95 63.4 36.2
p96 100.5 50.9
vusers.session_length Узел Булочка
мин 1835.3 1103.1
max 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 найдет свое место на рынке.

Оцените статью
devanswers.ru
Добавить комментарий