Deno, Node.js, Bun, Deno Deploy... ПК с огромной скоростью! Кто в итоге победитель?
Deno, Node.js, Bun, Deno Deploy... ПК с огромной скоростью! Кто в итоге победитель?

Недавно я написал статью о том, как среда выполнения DenoDeno DeployNode.jsBun и Cloudflare Workers сдаваться oak framework, я начал думать, будет ли между ними разница в производительности. Что ж, я нашел ответ.

методы и процессы

я здесь JavaScript/TypeScript В этой области применялось множество критериев, и плюсы и минусы почти каждого из них неоднократно обсуждались. Я верю, что некоторые люди будут относиться ко мне изметодами и процессы возражали, но я хотел сделать что-то, что считал справедливым.

я Другие критерии в этой области критикуются за то, что они не в полной мере оценивают воздействие в реальном мире. Хотя мой тестовый код прост, я хочу убедиться, что он обладает некоторыми функциями, которые вы ожидаете использовать в реальном приложении. занимает oak рамки для определения ценности каждого ответа "тип" и установите заголовок содержимого. Скорее всего, это использование oak Особенности фреймворка, которые люди часто используют. Он также имеет промежуточное программное обеспечение для обработки ошибок, которое, вероятно, можно встретить в реальных приложениях.

Вот что я сделал для Deno CLI、Bun и Node.js Тестовый код, используемый для каждого теста:

Язык кода:javascript
копировать
import { Application } from "@oak/oak/application";
import { Router } from "@oak/oak/router";
import { isHttpError } from "@oak/commons/http_errors";

const router = new Router();

router.get("/", (ctx, next) => {
  ctx.response.body = { hello: "world" };
  return next();
});

const app = new Application();

app.use(async (context, next) => {
  const start = Date.now();
  await next();
  const ms = Date.now() - start;
  context.response.headers.set("X-Response-Time", `${ms}ms`);
});

app.use(async (context, next) => {
  try {
    await next();
  } catch (err) {
    if (isHttpError(err)) {
      context.response.status = err.status;
      const { message, status, stack } = err;
      if (context.request.accepts("json")) {
        context.response.body = { message, status, stack };
        context.response.type = "json";
      } else {
        context.response.body = `${status} ${message}\n\n${stack ?? ""}`;
        context.response.type = "text/plain";
      }
    } else {
      console.log(err);
      throw err;
    }
  }
});

app.use(router.routes());
app.use(router.allowedMethods());

app.addEventListener("listen", ({ hostname, port, secure }) => {
  console.log(
    `Listening on: ${secure ? "https" : "http"}://${hostname}:${port}`,
  );
});

app.listen({ port: 8080 });

Для Deno Deploy, чтобы получить доступ к JSR и разрешить регрессию, связанную с динамическим импортом дуба, мне пришлось переписать оператор импорта:

Язык кода:javascript
копировать
import { Application, Router } from "jsr:@oak/oak@14.2";
import { isHttpError } from "jsr:@oak/commons@0.7/http_errors";

Стоит отметить, что если я не использую функцию Deploy Playground, а развертываю локальный проект Deno, опубликованный на GitHub, я могу использовать deno add, чтобы добавить зависимости JSR в проект, и они будут иметь одинаковый псевдоним в карте импорта.

Что касается Cloudflare Рабочие, мне пришлось изменить последнюю строку с app.listen({ port: 8080 }); Изменить на:

Язык кода:javascript
копировать
export default { fetch: app.fetch };

Кроме того, Cloudflare Worker никогда не генерирует событие «прослушивания», поэтому этот код избыточен, но я включил его для полноты картины.

для среда выполнения Deno、Bun и Node.js,я здесья оснащен Apple M1 Pro Тщательные тесты проводились на ноутбуке, который имел 14 дюймовый экран, оснащенный 32GB память, бег Sonoma 14.2.1。я Здесь на этой же машине работает сервер и генератор нагрузки.

я здесьтест использует последнюю версиюиз среда выполнения Deno(v1.41.2)и Bun(v1.0.30)。для Node.js,я использовал текущий LTS Версия(v20.11.1)ияизвремя выполнения Инструменты управления Последняя версия доступна в формате asdf (v21.6.2).

для Deno Развертывание, я развертываю код как Deploy Playground,для Cloudflare Рабочие, я использую wrangler Рабочий развернулся без каких-либо доработок. Я нахожусь в Мельбурне и использую Telstra NBN, средняя скорость загрузки 99.16 Мбит/с, скорость загрузки 18.90 Мбит/с, в среднем ping Время 19 миллисекунда.

длякаждый разтестбегать,я使用了существовать Node.js 18.12.1 бежит дальше autocannon CLI Версия 7.15.0. Я также использовал ту же тестовую конфигурацию:

Язык кода:javascript
копировать
autocannon -c 100 -d 10 -p 10

Это 100 одновременных подключений, 10 конвейерные запросы, длительность Время 10 Второй.

я прав каждая цель запускалась несколько раз тест,чтобы гарантировать, что каждый запуск существенно не отличается,И это так. Мой изрезультат — это последний тестовый прогон, который я делаю для каждой цели.

когда я просматриваю Deno Deploy и Cloudflare Workers изрезультат, я нашел явные различия по производительности, мне было любопытно, так что правкрайвремя выполнение было настроено по-другому,чтобы увидеть, имеют ли они одинаковые характеристики. В этой средней конфигурации,Я использовал следующий тест:

Язык кода:javascript
копировать
autocannon -c 100 -d 10

Это 100 параллельные соединения, без конвейерной обработки, непрерывное время 10 Второй.

результат

Ниже приведены таблица и диаграмма, представляющие мой тест-результат.

Задерживать

Задержка Чем ниже, тем лучше. Он измеряет время, необходимое для получения полного ответа на один запрос.

Локальный хостинг
периферийный хостинг

высокая нагрузка

средняя нагрузка

Запросов в секунду

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

Локальный хостинг
периферийный хостинг

высокая нагрузка

средняя нагрузка

наблюдать

среда выполнения Deno

Лично для меня Дено изрезультат Никаких сюрпризов. Даже если вы считаете oak изOverhead, он по-прежнему работает хорошо. Он также очень последовательен со стандартным отклонением ±1.28 миллисекунда.

Я хорошо знаком с опытом разработки Deno, и даже с добавлением JSR он меня не подвел. Это «просто работает».

Bun

я прав Bun Не знаю многого об этом, но когда я использую Deno Когда, Бан Когда он впервые появился, его быстроту хвалили. По моему мнению, как и многие другие тесты на этапе С, я думаю, что на этот раз это более «реалистичный» тест, Бун. Быстрее. Опять же, меня это не особенно удивляет, потому что они так сосредоточены на этом.

При этом средний показатель Задержки составляет 12.17 миллисекунды,в то время как Deno изсредний Задерживать为 13.54 Для меня миллисекунды являются убедительным индикатором того, что это победа с небольшим перевесом. бегать oak из Bun Сравнивать Deno быстрый 10%,Но я все равно думаю, что при принятии решения,Вы должны учитывать другие факторы,Потому что эта выгода может оказаться тривиальной.

В целом, Булочка Опыт работы разработчика был замечательным. и Deno То же, используйте TypeScript Изнулевая стоимость конфигурации — это здорово. Кроме того, через JSR, в коде я могу получить все интеллектуальные данные. и пройти bunx jsr add,Мне удалось добавить свои зависимости,без необходимости касаться других профилей.

Node.js

Очевидно, Node.js и Deno и Bun Между ними существует разрыв в производительности. Среди других тестов, которые я рассмотрел, Node.js разработчики часто заявляют, что используется более старая версия Node.js. Хотя это верная точка зрения, вы также должны учитывать ситуации, в которых люди могут использовать ее в производстве. Node.js Существует устаревшая проблема, из-за которой люди медленно обновляются.

Сказав это, вы можете увидеть Node.js Команда всегда усердно работает над улучшением Node.js изпроизводительность. Я верю, если я вернусь Node.js 18, разрыв в производительности будет еще больше.

Поэтому, хотя Bun Сравнивать Deno быстрый 10%, что может быть тривиальной победой, но Bun и Deno Средняя скорость на запрос не менее С Node.js быстрый вдвое больше, и это труднее игнорировать.

Если бы я был тобой, и я конвертировал Node.js используется как некая форма из экосистемы API server, я бы честно посмотрел на другие среды выполнения. Это неправильно Node.js экосистема или команда пренебрегают, что отчасти отражает реальность большей изэкосистемы, способной развиваться из.

Что касается опыта Разработчика, работы еще много. Больше Node.js экосистема решила многие проблемы, по сути, я использую из npx jsr add установка пакета сделала весь процесс очень безболезненным, и мне не пришлось думать, как его использовать в моем проекте. Машинопись. Я также знаю, что мне нужно быть внутри package.json Добавить "type": «модуль» можно использовать index.js вместо index.mjs。

Deno Deploy и Cloudflare Workers

я прав Deno Deploy и Cloudflare Workers выполнены и аналогичны локальной ситуации из нагрузочного теста,Это довольно большая нагрузка. Видим большой разрыв во времени выполнения запросов между двумя платформами.,Это заставило меня пересмотреть свой подход.

Это сделало оба случая немного теплее. Результаты нагрузочного теста также меня немного удивили.

Из этого я получил следующее:

  • Обе нагрузки совершенно нереальны. Из одного источника достигает ок. 1000 - 6000 запросов в секунду очень нереально. Хотя для некоторых Рабочих нагрузок,Обработка такого количества транзакций в секунду может стать реальностью,Но они обязательно будут территориально распределены,И это особенно важно для платформы Edge.
  • Я заметил Deno Deploy В течение всего теста расширился до двух изолятов (время обработчик выполнения). Я подозреваю, что это тоже много нагрузкаисредняя Разница между нагрузкойпроизводительностью является важным фактором. Я выполнил несколько других специальных прогонов и попробовал различные перестановки и комбинации конвейеров между запросами и обнаружил, что высокие конвейеры могут повлиять на Deploy изпроизводительность, но, похоже, это в основном общий пороговый потенциал.
  • не достигая "Расширенный" порог, Дено Deploy Сравнивать Cloudflare Workers хотетьбыстрыйгораздо больше。
  • Cloudflare Workers масштабируется на высокоуровневых транзакциях практически без ухудшения качества.
  • существоватьвысокая нагрузкатестсередина,Deno Deploy на самом деле в 62k Появилось в запросах 8 ошибки.

С точки зрения разработчика, меня снова может заинтересовать Deno Deploy Пристрастный. для Множество работ, все, что вам нужно, это просто среда выполнения Денои подтолкнуть к Гитхаб. В этом случае я просто использовал Deploy из playground Функция, а это значит, что я даже ничего не делаю локально.

Я не был знаком с этим раньше Cloudflare Workers из Разработчик опыта, пока я Воля oak Преобразование для запуска на нем. я Очень впечатлен тем, как все организовано. Хотя существует больше «шаблонов», есть хорошие инструменты, позволяющие абстрагироваться от них.

Победителем является...

JavaScript и TypeScript экосистема。я们正处于一个选择很多изэпоха,этотна самом дело очень хорошееиз,Потому что здесь происходят инновации.

кроме того,Если ты получишь что-нибудь от меня,Это подходит для большинства рабочих нагрузок.,хотеть做出производительность Не хорошоиз Решатьна самом Дело очень сложное из-за. Несмотря на то Node.js LTS также можно обработать 24k запросы по всему миру.

Еще один победитель, на мой взгляд, — это периферийные вычисления. Очевидно, что либо Deno Deploy все еще Cloudflare Рабочие, они все в периферийном Хостинг Работа – идеальный выбор. Они очень низкие и дают много преимуществ по сравнению с бессерверными технологиями.

Думаю, я также узнал, что дуб не так уж и плох.

Автор | Китсон П. Келли

Перевод и редактирование |

Исходный текст https://kitsonkelly.com/posts/http-speed#deno-deploy-and-cloudflare-workers.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose