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

  Рет қаралды 5,088

Decembrist ITTV

Decembrist ITTV

Күн бұрын

В 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 ай бұрын
Хотел переиграть и уничтожить Мурыча, и куда это в итоге нас привело?
@KH9IZb
@KH9IZb 4 ай бұрын
Интересные результаты! Пропустил трансляцию в телеграм, думал что не увижу, а тут такое!
@BEER-pl2mt
@BEER-pl2mt 4 ай бұрын
Побольше бы таких гонок, люблю тачки и девок!
@evzheniq9582
@evzheniq9582 4 ай бұрын
Было бы интересно проверить так ещё голенг
@EgorFrade
@EgorFrade 4 ай бұрын
Сделаю уточнение: данный тест больше сравнивает библиотеки 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 ай бұрын
Запощу в тг
@fluttermaster6148
@fluttermaster6148 2 ай бұрын
Bun не использует libuv, у них там своя реализацияна zig
@user-md2fk3jj1e
@user-md2fk3jj1e 2 ай бұрын
может позже покопаю насчет пропертей, вполне возможно что там есть хитрости для контейнера, но дело скорее всего просто в фреймворках, спринг в сравнении с этими лоно - это монстр который может все и любым удобным способом. вывод у меня этот складывается после посещения самой популярной в интернете страницы где меряются перформансом фреймворков, там в списке на первых местах по соседству с растом есть и java фреймворк от какого-то китайца, точнее как фреймворк, в нем пару классов и методов, обвязка над апи, вот и весь фреймворк, специально пилился под тест видимо) сприн по сравнению с ним в 4 раза медленнее, точно не помню уже. т.е. пока мы запускаем хелловорлд - мы меряем толщину фреймворка, когда запилим реальное приложение, то эта толщина будет малозаметна на общем фоне. ну а так получается, что средний джит компилятор победит хороший, если в первом программа раз в 10 короче на обработку приходит.
@undrheavrain
@undrheavrain 4 ай бұрын
как у тебя голос изменился после тестов, аж взгрустнул)
@zhenia14
@zhenia14 4 ай бұрын
Ещё не смотрел видео, но уже ставлю оцеку 120 пухлешей из 10.
@SMTDN
@SMTDN 4 ай бұрын
МУРЫЧ БЫЛ ПРАВ!
@user-ot3vy6ug7n
@user-ot3vy6ug7n 4 ай бұрын
🤣🤣🤣
@klyunnikovmaksim
@klyunnikovmaksim 4 ай бұрын
Было полезно посмотреть на графики утилизации cpu с разбивкой по типу user и system, также график использования сетевых портов. За видео спасибо
@jamjam3337
@jamjam3337 4 ай бұрын
😎
@dimitritarasenko9960
@dimitritarasenko9960 4 ай бұрын
А bun run без "--bun" точно будет работать на bun runtime, а не на ноде?
@dimitritarasenko9960
@dimitritarasenko9960 4 ай бұрын
Досмотрел до результатов. Похоже, что да. Похоже флаг нужен только когда npm script запускаешь
@albionOnlineSchool
@albionOnlineSchool 4 ай бұрын
У js нет своего рантайма. Ты говоришь, что js асинхронно реактивный. Но только host среда определяет, как будет выполняться код
@DecembristITTV
@DecembristITTV 4 ай бұрын
Чувак ну я же просил не душнить про ето (
@albionOnlineSchool
@albionOnlineSchool 4 ай бұрын
@@DecembristITTV извини, видео интересное
@ungeheurenungeziefer2662
@ungeheurenungeziefer2662 3 ай бұрын
Не знал что Цепкало разбирается в реактивном программировании
@DecembristITTV
@DecembristITTV 3 ай бұрын
Не знаю кто такой Цепкало)
@ungeheurenungeziefer2662
@ungeheurenungeziefer2662 3 ай бұрын
@@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 лучше только в быстром запуске, т.к не нуждается в прогреве.
@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 ай бұрын
@@AlexanderBorshak коротко не расскажешь, jvm самая навороченная vm из всех, лучше node и т.д. jit компилятор там есть с давних пор, с огромным количеством оптимизаций, умеет инлайнить методы, если в пределах финального “собранного” метода объект не улетает наружу - то легко может класть его поля в стек не создавая экземпляр в хипе. ну и на стеке кстати вы многое не сохраните, его размер не большой, а сильно переживать за хранение в куче не стоит, это не так много ресурсов требует (да и сейчас есть сборщик мусора zgc который не фризит приложение дольше 1 ms). Есть реально другая проблема, которую сейчас пытаются решить - чтобы была локальность размещения данных, как в структурах си, но изменения глобальные и подождать придется еще годик точно (но это не значит что проблема краеугольная и все тормозит из-за нее). конкретно перформарсные проблемы в тесте могут быть связаны с тем, что изначально томкат на котором крутится спринг бут (кстати через конфиг можно поменять на 2 других варианта) делался по классической модели - поток на соединение, ну и логики там точно больше чем в простеньком http сервере как в node. по-хорошему буст даст не реактивщина а виртуальные потоки, которые вышли в релиз в последней версии, но под них еще на сколько знаю идет оптимизация томката. Или сегодня видел, что есть фреймворк helidon - для тех, кому важна скорость и не особо нужен функционал.. в общем тест любопытный, но корректно было бы сравнивать фреймворки с сопоставимым функционалом, а так да, как написали ниже - это скорее тест обвязки интеграции с сетевым кодом и все что вокруг него. По хорошему стоит позапускать с профайлером, чтобы понять где узкое место и что вообще происходит. Но очевидно, что чем больше работы надо будет делать ноде, помимо перекладывания байтов в сокет - тем больше будет у ней проблем
@user-zx4kb1cl6u
@user-zx4kb1cl6u 4 ай бұрын
5 лет смотрю как придумывают новые невероятно быстрые языки и фреймворки, а пишут (и пишу) код на джаве. Интересно почему?
@zhandosissayev9798
@zhandosissayev9798 4 ай бұрын
Стабильность лучшая скорость на дистанции
@RodshotOfficial
@RodshotOfficial 4 ай бұрын
Дорого переписывать
@sky4thunder
@sky4thunder 4 ай бұрын
На разном пишут. В нашей компании последний год идёт переписывание сервисов с 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 ай бұрын
Никитос, надо мерять пропускную способность и тогда все встанет на свои места)
@DecembristITTV
@DecembristITTV 4 ай бұрын
Пиши как, замерю
@rerost9795
@rerost9795 4 ай бұрын
Если ты так хочешь смотреть на перфоманс, то используй Java EE, а не Spring. Зачем использовать фреймворк который предоставляет кучу возможностей, которые лежат мёртвым грузом?
@DecembristITTV
@DecembristITTV 4 ай бұрын
Потому что в проде будет именно он, если есть вопросы к его перфомансу, то это не ко мне
@404Negative
@404Negative 4 ай бұрын
имплементация сравнения не соответствует спецификации
@vasyavasin7364
@vasyavasin7364 4 ай бұрын
В ban нифига нет пока что ни либ ни кластера и половина встроенных функций не работает
@RichardLofty
@RichardLofty 4 ай бұрын
Можно перестать распространять ложь о том что JS однопоточный?
@DecembristITTV
@DecembristITTV 4 ай бұрын
Вам поговорить об этом больше не с кем, Я просил не душнить, нет вы пришли все равно
@kuanyshmyrkalykov5967
@kuanyshmyrkalykov5967 4 ай бұрын
А ге коменты от гоферов?
@user-ss9qn2xk9x
@user-ss9qn2xk9x 4 ай бұрын
ты как один поток, отмираешь. смотреть невозможно.
UI Design Trends Everyone Is Talking About in 2023
5:05
uxpeak
Рет қаралды 338 М.
Про Node js (взгляд бэкендщика)
0:45
TeachMeSkills Школа программирования
Рет қаралды 3,7 М.
小女孩把路人当成离世的妈妈,太感人了.#short #angel #clown
00:53
Is it Cake or Fake ? 🍰
00:53
A4
Рет қаралды 17 МЛН
ЧТО ВЫБРАТЬ? JetBrains AI Assistant VS GitHub Copilot
26:11
Decembrist ITTV
Рет қаралды 6 М.
Apple Just Integrated ChatGPT and Elon Musk is Furious!
8:08
AI Revolution
Рет қаралды 25 М.
Rust for TypeScript Developers
11:52
Andrew Burgess
Рет қаралды 52 М.
NEVER lose dotfiles again with GNU Stow
14:33
typecraft
Рет қаралды 13 М.
Великовозрастный программист. Стоит ли идти в IT в 40 лет
8:17
Дилетант широкого профиля
Рет қаралды 9 М.
What’s the difference between NodeJS & PHP
1:14
Creative Tim Tutorials
Рет қаралды 7 М.