JavaScript БЫСТРЕЕ Java? | Сравним Bun vs Node vs Spring Webflux перформанс

Поділитися
Вставка
  • Опубліковано 8 чер 2024
  • В JS мире только и разговоров что о блэйзингли фаст Bun, новом runtime для языка JavaScript, может ли он победить в производительности Java, которая считается королем нагрузки в мире бэкенда
    Сбор средств на бенчмарки с базой: boosty.to/decembrist/single-p...
    Код проекта: boosty.to/decembrist/posts/6b...
    00:00 - 03:08 Что будем мерить?
    03:08 - 12:31 Как будем мерить?
    12:31 - Результаты
    Лайв канал: / @decembrist-lounge
    Поддержать канал/смотреть видео сразу: boosty.to/decembrist
    Вконтактик: decembrist_org
    Телеграм новости/мемы: t.me/decembristit
    Телеграм чат: t.me/DecembristITTV
    Инстаграм: / nevornevor

КОМЕНТАРІ • 62

  • @Alex_Bardak
    @Alex_Bardak 4 місяці тому +24

    Хотел переиграть и уничтожить Мурыча, и куда это в итоге нас привело?

  • @KH9IZb
    @KH9IZb 4 місяці тому

    Интересные результаты! Пропустил трансляцию в телеграм, думал что не увижу, а тут такое!

  • @BEER-pl2mt
    @BEER-pl2mt 4 місяці тому +5

    Побольше бы таких гонок, люблю тачки и девок!

  • @evzheniq9582
    @evzheniq9582 4 місяці тому +4

    Было бы интересно проверить так ещё голенг

  • @EgorFrade
    @EgorFrade 4 місяці тому +8

    Сделаю уточнение: данный тест больше сравнивает библиотеки libuv и java.nio и (хз что там в Bun) , которые все нативные
    Я делал замеры java netty (Linux epoll) и c++ libuv (Linux epoll) они шли прям нога в ногу на похожих тестах. (сравнивал java и c++ (не js) )
    по поводу Bun : года 3-4 назад проходил HighLoadCamp от яндекса, и там хитрые умельцы умудрились из epoll выжить максимум за счет хака с DMA но при этом страдала файловая система (если утрировать)(это все было на с или с++).
    Я боюсь что Bun пошёл по той же дорожки, чтобы нарисовать красивые графики он хакает epoll за счет блокировки другой периферии . Когда они переболеют этим, графики выровняются.
    Резюмирую:
    js хорошо умеет перекладывать данные их нетворка в нетворк, (в libuv работа с файлами блокирующая и реализована через тред пулы)
    java умеет очень хорошо перекладывать данные из нетворка на диск (kafka тому подтверждение) и как число-дробилка тоже неплоха
    с/с++ хороши во всем кроме : менеджмента памяти, защиты памяти, порога входа

    • @DecembristITTV
      @DecembristITTV  4 місяці тому +1

      Запощу в тг

    • @fluttermaster6148
      @fluttermaster6148 2 місяці тому

      Bun не использует libuv, у них там своя реализацияна zig

  • @user-md2fk3jj1e
    @user-md2fk3jj1e 2 місяці тому

    может позже покопаю насчет пропертей, вполне возможно что там есть хитрости для контейнера, но дело скорее всего просто в фреймворках, спринг в сравнении с этими лоно - это монстр который может все и любым удобным способом. вывод у меня этот складывается после посещения самой популярной в интернете страницы где меряются перформансом фреймворков, там в списке на первых местах по соседству с растом есть и java фреймворк от какого-то китайца, точнее как фреймворк, в нем пару классов и методов, обвязка над апи, вот и весь фреймворк, специально пилился под тест видимо) сприн по сравнению с ним в 4 раза медленнее, точно не помню уже. т.е. пока мы запускаем хелловорлд - мы меряем толщину фреймворка, когда запилим реальное приложение, то эта толщина будет малозаметна на общем фоне. ну а так получается, что средний джит компилятор победит хороший, если в первом программа раз в 10 короче на обработку приходит.

  • @undrheavrain
    @undrheavrain 4 місяці тому

    как у тебя голос изменился после тестов, аж взгрустнул)

  • @zhenia14
    @zhenia14 4 місяці тому +3

    Ещё не смотрел видео, но уже ставлю оцеку 120 пухлешей из 10.

  • @klyunnikovmaksim
    @klyunnikovmaksim 4 місяці тому +1

    Было полезно посмотреть на графики утилизации cpu с разбивкой по типу user и system, также график использования сетевых портов. За видео спасибо

  • @SMTDN
    @SMTDN 4 місяці тому +11

    МУРЫЧ БЫЛ ПРАВ!

  • @jamjam3337
    @jamjam3337 4 місяці тому +1

    😎

  • @dimitritarasenko9960
    @dimitritarasenko9960 4 місяці тому

    А bun run без "--bun" точно будет работать на bun runtime, а не на ноде?

    • @dimitritarasenko9960
      @dimitritarasenko9960 4 місяці тому

      Досмотрел до результатов. Похоже, что да. Похоже флаг нужен только когда npm script запускаешь

  • @albionOnlineSchool
    @albionOnlineSchool 4 місяці тому +2

    У js нет своего рантайма. Ты говоришь, что js асинхронно реактивный. Но только host среда определяет, как будет выполняться код

    • @DecembristITTV
      @DecembristITTV  4 місяці тому

      Чувак ну я же просил не душнить про ето (

    • @albionOnlineSchool
      @albionOnlineSchool 4 місяці тому

      @@DecembristITTV извини, видео интересное

  • @chip253
    @chip253 4 місяці тому

    Спасибо, Интересно! Доказали то же что и прошлый тестер. Только уточнить надо было - сколько памяти сожрет джава, на прошлом тесте закрашилось по расходу памяти. И самый сок - надо было добивать сюда php8.1 во там был рекорд раз 20+ объехал всех, и по памяти красавчик.

  • @MsTim159
    @MsTim159 4 місяці тому

    Загугли "Java vs Node Js. Who is the King. Benchmarking web frameworks" там у автора серия видео сравнений, сравнивает все языки и фреймворки к ним

  • @DreamingDolphing
    @DreamingDolphing 4 місяці тому

    Bun работает через PM2.

  • @ilyasdzhalilov6645
    @ilyasdzhalilov6645 4 місяці тому

    В реальных условиях важна утилизация cpu, памяти и сети. Было бы интересно осветить этот аспект.
    И еще как мысль: не факт что проверять на одном ядре правильно

    • @DecembristITTV
      @DecembristITTV  4 місяці тому

      Не знаю как корректно тестировать бан на нескольких ядрах

  • @Dan.398
    @Dan.398 4 місяці тому

    А Java скомпилирована в Jit или Aot? Вроде как тоже роляет.

    • @DecembristITTV
      @DecembristITTV  4 місяці тому

      Не Aot, Дак я ж ее погрел, должна быть не медленнее чем aot как минимум

    • @aamorous
      @aamorous 4 місяці тому

      aot медленнее прогретого jit, aot лучше только в быстром запуске, т.к не нуждается в прогреве.

  • @ungeheurenungeziefer2662
    @ungeheurenungeziefer2662 3 місяці тому

    Не знал что Цепкало разбирается в реактивном программировании

    • @DecembristITTV
      @DecembristITTV  3 місяці тому

      Не знаю кто такой Цепкало)

    • @ungeheurenungeziefer2662
      @ungeheurenungeziefer2662 3 місяці тому

      @@DecembristITTV ну чел из ПрожекторПерисХилтон

  • @desdichago
    @desdichago 4 місяці тому

    А теперь с native image ;)

    • @DecembristITTV
      @DecembristITTV  4 місяці тому

      Любой каприз за ваши деньги)))))000))

  • @AlexanderBorshak
    @AlexanderBorshak 4 місяці тому

    Bun в эксперементальном режиме поддерживает API воркеров (Workers), так что можно создать воркеров по кол-ву ядер и в каждом воркере запустить веб-сервер. Правда, в Java, насколько я знаю, все данные лежат на куче в обертках, и все гоняется через байт-код; а в Bun, при правильно написанном коде - если используется мономорфизация вызовов функций, мы из-за JIT получим эффективный машинный код - так что при таком тесте, когда у нас и логики-то никакой нет, Bun по-любому выиграет. В целом же, поскольку у нас нет логики, то и непонятно, что мы тут тестируем? Сравниваем скорость кода, сгенерированного JIT и байт-кода Java? Но несмотря на бесполезность затеи, было бы интересно взглянуть также на результаты теста для Го и Раста )))

    • @DecembristITTV
      @DecembristITTV  4 місяці тому

      t.me/decembristit/1304

    • @user-md2fk3jj1e
      @user-md2fk3jj1e 4 місяці тому

      " все данные лежат на куче в обертках, и все гоняется через байт-код" нет, вы не знаете и написали ерунду

    • @AlexanderBorshak
      @AlexanderBorshak 4 місяці тому

      @@user-md2fk3jj1e Не стану спорить, я с Джавой не работаю. Но может тогда лучше сразу написать как правильно, то есть не просто сказать, что написал ерунду, а сказать _почему_ сказал ерунду?

    • @AlexanderBorshak
      @AlexanderBorshak 4 місяці тому

      @@user-md2fk3jj1e Потому как посмотрел сейчас в интернете, там пишут что таки да, Джавовый код компилируется в байт-код, а затем исполняется на JVM; а данные хранятся в обертках на куче - ну, кроме некоторых атомарных данных, по типу чисел - но предполагаю, что в таком сложном проекте как Спринг он там сам нагенерирует кучу объектов, что будут лежать на куче. Так что хотелось бы услышать, как _на самом деле_ все устроено. Наперед спасибо!

    • @user-md2fk3jj1e
      @user-md2fk3jj1e 4 місяці тому +1

      @@AlexanderBorshak коротко не расскажешь, jvm самая навороченная vm из всех, лучше node и т.д. jit компилятор там есть с давних пор, с огромным количеством оптимизаций, умеет инлайнить методы, если в пределах финального “собранного” метода объект не улетает наружу - то легко может класть его поля в стек не создавая экземпляр в хипе. ну и на стеке кстати вы многое не сохраните, его размер не большой, а сильно переживать за хранение в куче не стоит, это не так много ресурсов требует (да и сейчас есть сборщик мусора zgc который не фризит приложение дольше 1 ms). Есть реально другая проблема, которую сейчас пытаются решить - чтобы была локальность размещения данных, как в структурах си, но изменения глобальные и подождать придется еще годик точно (но это не значит что проблема краеугольная и все тормозит из-за нее). конкретно перформарсные проблемы в тесте могут быть связаны с тем, что изначально томкат на котором крутится спринг бут (кстати через конфиг можно поменять на 2 других варианта) делался по классической модели - поток на соединение, ну и логики там точно больше чем в простеньком http сервере как в node. по-хорошему буст даст не реактивщина а виртуальные потоки, которые вышли в релиз в последней версии, но под них еще на сколько знаю идет оптимизация томката. Или сегодня видел, что есть фреймворк helidon - для тех, кому важна скорость и не особо нужен функционал.. в общем тест любопытный, но корректно было бы сравнивать фреймворки с сопоставимым функционалом, а так да, как написали ниже - это скорее тест обвязки интеграции с сетевым кодом и все что вокруг него. По хорошему стоит позапускать с профайлером, чтобы понять где узкое место и что вообще происходит. Но очевидно, что чем больше работы надо будет делать ноде, помимо перекладывания байтов в сокет - тем больше будет у ней проблем

  • @user-zx4kb1cl6u
    @user-zx4kb1cl6u 4 місяці тому +2

    5 лет смотрю как придумывают новые невероятно быстрые языки и фреймворки, а пишут (и пишу) код на джаве. Интересно почему?

    • @zhandosissayev9798
      @zhandosissayev9798 4 місяці тому +3

      Стабильность лучшая скорость на дистанции

    • @RodshotOfficial
      @RodshotOfficial 4 місяці тому +3

      Дорого переписывать

    • @sky4thunder
      @sky4thunder 4 місяці тому +1

      На разном пишут. В нашей компании последний год идёт переписывание сервисов с Java и node.js на Rust. Выигрыш в производительности очень значительный.

    • @user-zx4kb1cl6u
      @user-zx4kb1cl6u 4 місяці тому

      @@sky4thunder вопрос был риторический, но удачи в этом деле)

    • @zhandosissayev9798
      @zhandosissayev9798 4 місяці тому

      @@sky4thunder на rust нужно переучиваться. Хотя он повсеместно отвоевывает. Но его время еще не пришло. Через 2-3 года начнется хайп

  • @ilyasdzhalilov6645
    @ilyasdzhalilov6645 4 місяці тому

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

    • @DecembristITTV
      @DecembristITTV  4 місяці тому

      Как использовать виртуальные потоки? Я не умею)

    • @ilyasdzhalilov6645
      @ilyasdzhalilov6645 4 місяці тому

      @@DecembristITTV Зависимость: implementation 'org.springframework.boot:spring-boot-starter-web'
      В property: spring.threads.virtual.enabled=true

  • @mrsergey7469
    @mrsergey7469 4 місяці тому

    Эх, бедная жабка.... Но смотреть на ее код приятнее

  • @VfxDodasi
    @VfxDodasi 4 місяці тому

    Сделай так про C++ python

    • @ukratitelkisok9726
      @ukratitelkisok9726 4 місяці тому

      Ты серьёзный?

    • @VfxDodasi
      @VfxDodasi 4 місяці тому

      да это будет кайф тем кто смотрит python))))@@ukratitelkisok9726

  • @rerurkful
    @rerurkful 4 місяці тому

    Странная постановка вопроса. Js работает в некой среде. Вопрос к скорости к среде а не к Js

  • @bronetemkinponosec1973
    @bronetemkinponosec1973 4 місяці тому

    Никитос, надо мерять пропускную способность и тогда все встанет на свои места)

  • @rerost9795
    @rerost9795 4 місяці тому

    Если ты так хочешь смотреть на перфоманс, то используй Java EE, а не Spring. Зачем использовать фреймворк который предоставляет кучу возможностей, которые лежат мёртвым грузом?

    • @DecembristITTV
      @DecembristITTV  4 місяці тому

      Потому что в проде будет именно он, если есть вопросы к его перфомансу, то это не ко мне

  • @404Negative
    @404Negative 3 місяці тому

    имплементация сравнения не соответствует спецификации

  • @vasyavasin7364
    @vasyavasin7364 4 місяці тому

    В ban нифига нет пока что ни либ ни кластера и половина встроенных функций не работает

  • @RichardLofty
    @RichardLofty 4 місяці тому +1

    Можно перестать распространять ложь о том что JS однопоточный?

    • @DecembristITTV
      @DecembristITTV  4 місяці тому

      Вам поговорить об этом больше не с кем, Я просил не душнить, нет вы пришли все равно

  • @kuanyshmyrkalykov5967
    @kuanyshmyrkalykov5967 4 місяці тому

    А ге коменты от гоферов?

  • @user-ss9qn2xk9x
    @user-ss9qn2xk9x 4 місяці тому

    ты как один поток, отмираешь. смотреть невозможно.