Развенчиваем мифы .net 7 vs Node.js 19

Поділитися
Вставка
  • Опубліковано 26 січ 2025

КОМЕНТАРІ • 337

  • @maksimsergeevich5939
    @maksimsergeevich5939 2 роки тому +18

    А почему код однопоточной ноды написан полностью в блокирующие стиле? Функции хендлера синхронные, блокирующие, fs readfile синхронный.
    Типа потому что на net код тоже синхронный? Чтоб честно было? Тогда чтобы было честно , может тестировать на системе с одним ядром (в контейнере).

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Вызов в один поток тоже на . net быстрее на задачах где хоть что-то делается

    • @albalyu
      @albalyu 2 роки тому +4

      Вы асинхронную Ноду заставили против ее природы работать синхронно, а потом говорите, что .net быстрее. А если раскидать Ноду по потокам, которые у нее есть и дать работать асинхронно, каким окажется результат сравнения?

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@albalyu где я заставил её работать синхронно? Можно меня ткнуть в это место 🤣

    • @albalyu
      @albalyu 2 роки тому +2

      @@Kulibins1 Читать файл синхронно, потом запустить сервер, в запросах к которому тоже читать файл синхронно - это как бы синхронно. Плюс тяжелая математическая операция, которую в реальном проекте вынесут в отдельный поток, дабы не блокировала текущий. Плюс некоторое количество вещей в коде, которые в реальных проектах так не пишут. Плюс Ваши утверждения о типах чисел в Ноде, основанные явно не на документации к V8, плюс утверждения о многопоточности, которые не соответствуют действительности. Это не сравнение производительности в реальных условиях. Это сравнение теплого с мягким. Они разные и работают по разному. Корректные тесты должны максимально учитывать преимущества тестируемых систем, чего в данном случае нет.

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      @@albalyu файлы и там и там читаются синхронно, и этот небольшой файл уже в кэеше, и при тесте выдаёт максимальное число которое вообще возможно и там и там (упёрлось в канал). Ваши предложения странноватые, вы предлагаете аналог webworker использовать? Так на внутреннюю пересылку потратится больше времени. И тогда я включу потоки для c#, как думаете какой будет результат?

  • @andrewmoryakov7556
    @andrewmoryakov7556 2 роки тому +8

    Круто сделать подобное сравнение ещё для. Net java c++

  • @KoreaSoloQLCSLegends
    @KoreaSoloQLCSLegends 2 роки тому +18

    на node js у вас initial connect занимает 300ms(видимо косяки в настройке сервера). само же вычисление - waiting for server respond занимает 20ms на node js и около 30ms у C#

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      На других запросах всё быстрее, те же хелоу ворды, и чтения файлов.

  • @olegilyin6002
    @olegilyin6002 2 роки тому +4

    Спасибо, отличное видео, посмотрел с удовольствием, хотелось бы посмотреть сравнение с GO!

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Придется похоже и сравнение с go в план ставить

    • @Disorrder
      @Disorrder 2 роки тому +1

      @@Kulibins1🤣🤣

  • @Inok9090
    @Inok9090 2 роки тому +5

    Отличное тестирование, я бы еще посмотрел такое же сравнение с golang =)

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Если есть опыт с go, то можно переписать тесты. Я просто сам пока go не собираюсь изучать. Сам только с rust еще сравню.

  • @shmelvolosatiy
    @shmelvolosatiy Рік тому +3

    Очень интересные видео у вас, спасибо

    • @Kulibins1
      @Kulibins1  Рік тому +1

      Рад что нравится

  • @0000xD
    @0000xD 2 роки тому +1

    какие мысли по поводу trpc vs REST?

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Пока ни каких. На проектах для связи бэка и фронта больше GraphQL использую, а сложный бэк больше через шину с друг другом общается.

  • @sleepstream9433
    @sleepstream9433 2 роки тому +2

    5 лет пишу js/ts, вдохновил на изучение .net )

  • @dobrinyanicitich7514
    @dobrinyanicitich7514 Рік тому +1

    Вот вы говорите "Смотрите следующие видео будет интересно", и я верю, что будет интересно =)

    • @Kulibins1
      @Kulibins1  Рік тому +2

      Вера в интересное - это хорошо 👍

  • @BumChigaBum
    @BumChigaBum 2 роки тому +1

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

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Да все из коробки. Характеристики компа зеон 12 ядер, 24 потока, памяти 64 Gb. Если смотреть загрузку памяти, то она копеечная там что-то 500 Mb. Самое интересное процессор тоже не загружен, при тесте больше всего сам jmeter взял, но всё равно общая нагрузка всего не превышала 25% проца, т.е. как бы сказать что мол node в одино ядро работала, а .net нагрузил все ядра, то тоже нет. У меня есть видео про моё рабочее место там характеристики компа видно подробно.

  • @nitroexpress9928
    @nitroexpress9928 2 роки тому +3

    1) Node js вроде уже 100 лет в обед как поддерживает многопоточность, разве нет?
    2) Для тяжелых вычислений есть возможность писать на Ноду модули на Расте или C++.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Когда-то давно был у меня проект на VB (Легаси), а сложные вычисления я писал на ASM с использованием mmx и sse. Вы предлагаете нечто похожее. Для этого либо вы должны C++ знать, либо должен другой разработчик эту работу сделать. Если вы специалист по C++, то сомневаюсь что будете писать на Js, C++ сник может зарабатывать больше чем Js ник, хотя бы из-за того что их меньше. Разработчиков Rust видел еще меньше, но тесты напишу что бы rust сравнить с c#.

    • @nitroexpress9928
      @nitroexpress9928 2 роки тому

      @@Kulibins1 тема модулей на плюсах довольно обширно раскрыта в мануале к ноде, так что это вполне себе официальная костылизация=)

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      @@nitroexpress9928 ну к c# тоже можно подключить DLL на c++ причем есть mc++ это смесь менеджмент и анменеджмент кода на c++. И даже win api вызывать и кучу других малоприменимых сценариев, например можно openCl (я пробовал)

  • @beka777go
    @beka777go 2 роки тому +21

    Если я правильно помню у ноды кластера используются, хз насколько они лучше или хуже чем многопоточность, но я думаю надо было и кластера чекнуть. Плюс мне лично хотелось бы понять насколько сильно нода отстаёт от Шарпа в обычном rest api, так как если париться насчёт ручного управления памятью то можно и весь бэк на golang/rust написать, или на питоне и всё вычисления на сишных dll-ках делать

    • @Kulibins1
      @Kulibins1  2 роки тому +5

      У автора статьи была просто нода, а так да можно и с клатером сравнить. Но я смотрел и в один поток когда из браузера запрашивал - результат был виден, всё равно .net быстрее, иногда значительнее

    • @nooftube2541
      @nooftube2541 2 роки тому

      сайты на шарпе тоже кластером масштабируют)

    • @eugenefedoryachenko8793
      @eugenefedoryachenko8793 2 роки тому

      В ноде нужно явно делать форки для кластеров, при этом они не сильно помогают в производительности, так как нода по факту работает многопоточно за счет микротасков и ивентлупа.

    • @nitroexpress9928
      @nitroexpress9928 2 роки тому

      @@Kulibins1 скачал код из Вашего репозитория, у меня этот /map что на ноде, что на дотнете отрабатывает за 20 +/-2 ms (i5-9600K, Linux Manjaro, .NET 7, NodeJS 18). Откуда такая огромная разница на видео - непонятно. Вы на винде тестили?

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@nitroexpress9928 тестил на Винде. Но не нужно говорить что тут винда виновата и что Линукс в разы быстрее, это не так. Проц у меня зеон. Сколько у вас показал jmeter? Конфигурационный файл вместе с исходниками

  • @albalyu
    @albalyu 2 роки тому +8

    То, что Node.js нет многопоточности - это давно неправда (смотреть в сторону модуля worker_threads). К тому же никто на Ноде не пишет реальные запросы в синхронном блокирующем стиле. Это просто неэффективно. Даже в самом начале мануалов для начинающих говорится, что надо использовать асинхронный неблокирующий код. Плюс движок V8, а Нода - это именно V8, для разных типов чисел использует разное внутреннее представление, и если мы переменной присвоили целое, то и обрабатываться она внутри будет как int, а не как double. И только если мы присвоим вещественное число, то переменная поменяет свой тип на тип с плавающей точкой. Прежде, чем что-то утверждать о том, с чем Вы не очень знакомы, хорошо бы посмотреть доки - а вдруг все совсем не так, как Вы себе представляете. Также сила Ноды в том, как она множество запросов, которые обрабатываются асинхронно, а не один за другим. И время их выполнения частично перекрывается. Да и сама Нода со старта работает сразу в несколько потоков и для разных надобностей используются разные потоки. Ничего не имею против C#, но отказаться от всех преимуществ Node.js, а потом утверждать что C# быстрее - это не очень красиво.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Какой код из тестов вы предлагаете "улучшить" только пожалуйста конкретно. Я готов принять ваши предложения и перетестировать

    • @albalyu
      @albalyu 2 роки тому +5

      Реальное предложение: Вы находите программиста на Ноде с большим опытом (не меня - мне лениво), договариваетесь с ним о функциональности, работу которой хотите протестить и он пишет максимально эффективный код на Ноде, опираясь на годы своего опыта, а Вы на C#, опираясь на годы своего опыта. А потом можно сравнивать. Это и будут одинаковые условия, с моей точки зрения.

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      @@albalyu я написал полностью идентичный код. Он не максимально эффективен на c# ( максимально эффективен был исходный мой код). Я же просил дать реальные замечания к коду на Js, то пишете что я как-то заблокировал асинхронность/многопоточность Js, то огромный ответ что внутри движка v8 Js number может соптимизироваться до int (хотя все вычисления с double в карте идут и ни какой оптимизатор ничего не делает). В общем не надо голословных утверждений.

    • @albalyu
      @albalyu 2 роки тому +2

      ​@@Kulibins1 Вы не могли написать полностью идентичный код для систем с таким разным подходом к разработке. Уже то, что Нода асинхронная, а Шарп синхронный говорит о том, что работают они по разному, и писать для них надо по разному, а не идентично.. Ваши вопросы ко мне говорят о том, что Вы даже не понимаете проблем Вашего JS кода. Теперь конкретно: Вы сказали в видео, что все числа в JS представляются в виде double, однако это не так, V8 имеет различные внутренние представления для различных типов чисел. Вы сказали, что в Ноде нет многопоточночти - это уже давно не так. Вы написали синхронный блокирующий код для асинхронного сервера и утверждаете, что так и надо. На Ноде так даже джуны не пишут, потому что по рукам получают ). Вы используете сохранение элементов массива каждый раз увеличивая его размер и утверждаете, что это нормально, но такое сохранение данных в массив работает в 20!!! раз медленнее, чем если бы Вы сразу создали массив нужной длины. Для массива размером 10 000 000 элементов время выполнения цикла заполнения элементов значениями будет соответственно 12-15 мс и 250-300 мс на моем компьютере. Разница почти в 20 раз. А Вы говорите, что это не имеет значения. А еще про корректные тесты... На сим разрешите откланяться. А ревьюить Ваш код и предлагать Вам тесты, увольте. Вы и сами можете придумать еще много такого же 'корректного', как и эти.

    • @albalyu
      @albalyu 2 роки тому +5

      И да, как Node.js разработчик с такими утверждениями Вы бы не смогли пройти собеседование у меня даже на уровне джуна.

  • @shyngyskhanbokikhan6782
    @shyngyskhanbokikhan6782 2 роки тому +2

    Пример про фибоначчи в node просто не работает (когда число становится большим js просто возвращает infinity). 3:30 полное заблуждение, так как js однопоточный при выполнении цикла он просто заморозится и не будет ничего дальше выполнять пока цикл не закончится ( shyngy/simple-loop ) - github тут пример рекомендую запустить и посмотреть, еще прочитать про event loop

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Про то что число становится бесконечность я знаю, результат же запроса выводиься , в отличии от первоначальной статьи. По поду того что я не прав на 3:30 тут пока я не вывел результат, то функция выполнялась максимально быстро, как только вывел, то всё стало на свои места. Как устроен event loop, я как бы знаю (может не всё, т.к. там оптимизаций вагон и маленькая тележка 🤣 )

    • @shyngyskhanbokikhan6782
      @shyngyskhanbokikhan6782 2 роки тому +1

      @@Kulibins1 про 3:30 и вправду node быстрее, так как он просто не считал до конца, а завершил цикл досрочно. 1. Цикл начался, число фибаначчи постепенно начало увеличиваться 2. в один момент число стало настолько большим что буффер заполнился. 3 цикл прекратился вывелся результат Infinity. “я не эксперт в node но по моим наблюдением все работает примерно так”

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@shyngyskhanbokikhan6782 не смотря на такую оптимизацию всё равно оказался медленнее. И это прогнозируемо. И как тут мне многие пишут что мол ноду не берут на вычислительные задачи, а на задачах где всё в БД упирается и разницы не будет. Я это всё понимаю и говорил что ничего в Js плохого не вижу. Тут обман исходной статьи меня немного вывел из себя 🤣

    • @shyngyskhanbokikhan6782
      @shyngyskhanbokikhan6782 2 роки тому +1

      @@Kulibins1 про event loop в github выше есть два примера, которые показывают когда js игнорирует цикл и продолжает дальше работать, и когда он ждет полного выполнение цикла а потом выводит результат.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@shyngyskhanbokikhan6782 спасибо. Обязательно посмотрю 👍

  • @Дэн-з7н
    @Дэн-з7н 2 роки тому +1

    Вопрос не по теме, но хочется задать. C#/NET не владею, но слежу из далека. Скажите, с учётом рывка в развитии этих технологий + crossplatform'енность Core, можно ли сказать, что эта связка вполне себе может конкурировать с PHP/Python/Ruby для быстрого создания прототипов в web, да и вообще web-проектов? И хостинг уже не является фактором сложности/дороговизны, т.к. вполне себе можно развернуться на linux?

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Можно развернуть на линуксе. И смотря в чем вопрос. Если вы хотите делать фронт, то я не люблю server side rendering и все перечисленное именно его и делает. В .net есть и серверный и клиентский рендеринг, но клиентский рендеринг в .net "тормоз". Я делаю бэк на .net, а фронт на angular. Из опыта обычно потом говорят берите и дорабатывайте прототип до коммерческого использования, поэтому и прототип хорошо бы делать правильно. Вот лично для меня сделать прототип на .net + angular займёт столько же времени как кто-то на PHP/Python/Ruby сделает тоже самое. А может и меньше если еще к этой связке добавить .net + GraphQL + Angular

    • @GreenDimka1
      @GreenDimka1 2 роки тому +1

      @@Kulibins1 добавлю, что разработка с нуля - это не то же, что с использованием фреймворков, коих у PHP не мало.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      @@GreenDimka1 У всех платформ фрейворков не мало.

    • @Дэн-з7н
      @Дэн-з7н 2 роки тому +1

      ​@@Kulibins1 Понял, спасибо. Просто хотел подтвердить гипотезу, что для нового и при этом даже небольшого проекта можно смело брать .net вместо, например, php + laravel или python + django. Вопреки давним мнениям о том, что .net - это дольше и дороже.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@Дэн-з7н если вы так сравниваете, то конечно можно.

  • @JavierMartinez-ol9uu
    @JavierMartinez-ol9uu 2 роки тому +1

    17:16 (с# сервер может отвечать на большое количество запросов): А что если нод джээсовский сервер горизонтально масштабирован, то есть у нас за раз работает несколько инстансов этого веб-приложения. Все равно с# сервер будет отвечать на большое количество запросов чем нодовский?

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Уже несколько человек об этом написало, но ведь и сервер .net тоже можно масштабировать горизонтально. Тут именно дело в том что автор исходной статьи утверждал что node.js быстрее .net c#, я показал что это не так.

    • @nitroexpress9928
      @nitroexpress9928 2 роки тому +2

      @@Kulibins1 вот только в рамках одного компьютера кластерный режим ничего не даст Шарпу, а Нода в задачах типа этих бенчмарков становится быстрее в разы.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@nitroexpress9928 может быть. Но вон запустили в кластером режиме ноду получили, только то что она в картах сравнялась (но я бы перепроверил 🤣) в тесте натуральной сортировке отставание в разы даже с кластером.

  • @Maximurz1k
    @Maximurz1k 2 роки тому +3

    А что если включить Воркеры в ноде и распределить нагрузку по ядрам?

    • @Kulibins1
      @Kulibins1  2 роки тому +5

      Тоже вариант, но даже в один вызов если смотреть, то nodejs медленнее. Для языка js, оно работает фантастически быстро, но против мироздания не пойдёшь в C# структуры (их кстати в большой java нет, а как бы всё делать объектами, то сборщик мусора перегружен), прямой доступ к памяти (пример из натуральной сортировки), всякие span и т.д. Если писать простой код, то node.js может и достаточно. Могу кстати и с финансово технической точки зрения обосновать что многопоток лучше чем кластер (хотя и на .net делаем кластера, но тут их будет избыточно - на проекте не дали кластер к postgre сделать, типа обычная репликация без распределения нагрузки 🤔)

    • @PavelAShvedov
      @PavelAShvedov 2 роки тому +1

      @@Kulibins1 я не шарю в .net core, поэтому закрался такой вопрос, а случайно тот вебсервер, который в C# создается в коде, случайно не использует под капотом какой-нибудь пулл воркеров для обработчиков запросов? Чет уж сильно много разрыв в 30 раз, не могу поверить, что там такой оверхед в ноде

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@PavelAShvedov в 30 раз версии где я использую оптимизации прямого доступа к памяти. Этот код равен тому который был бы на голом Си. Представь что каждое обращение к элементу массива, проверяет а не вышел ли ты за его границы, а в коде с прямым доступом я не делаю таких проверок. И на самом деле это еще не максимум который можно выжать, тут можно было бы использовать simd команды, но сложность кода реско возрастёт и придется писать несколько спец версий, например под arm и x64 (sse ... avx), а я последний раз писал только под первый sse. Сколько даст прироста simd, не знаю, мне пока хватает и моего варианта что быстрее аналогов.

    • @PavelAShvedov
      @PavelAShvedov 2 роки тому +2

      @@Kulibins1 ну если дотнет никак не параллелит обработку запросов, и все дело в такой лютой оптимизации под конкретный кейс, то спорить не буду, но с другой стороны показательность этого бенчмарка тоже крайне субъективная, если хочется в ноде заморочиться, то можно написать решение на том же С++ и подцепить к ноде и вызвать, проблема и подхода с упоротой оптимизацией с С#, и с извращениями с С++ для ноды только в том, что в реальной жизни, в каком-нибудь энтерпрайзе, никто не будет так корпеть над тормозящей функцией, проще поднять еще один инстанс приложения и сбалансировать нагрузку, в 99% проектов имеено так и сделают. Максимум что будут пытаться оптимизировать руками, это запросы к БД, если ОРМ-ка не справляется, так как чаще всего основные тормоза в типовых веб-приложениях именно там, а чем дергать эту бызу данных уже не суть важно, C# там, нода или elixir. Сугубо ИМХО

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@PavelAShvedov задачи есть разные не только прослойка между базой и фронтом. Посмотрите ролик про мою SCADA систему, на главной страничке.

  • @BasilKotov
    @BasilKotov 2 роки тому +2

    это же все не важно, разве нет? кто на чем пишет, тот на том пишет :)
    очевидно что dotnet быстрее, но это не важно
    очевидно что в nodejs войти проще, но это тоже не важно
    современные задачи (большинство из них) требуют скорости их решния (именно скорости написания кода), но не скорости выполнения этого кода
    гораздо важнее вопрос поддержки кода, вот тут стоит призадуматься :)
    что будет через год? сможешь ли ты взять проект написанный год назад и скомпилировать его сегодня? сколько усилий тебе понадобится?
    а продолжить разработку и развить проект?
    я бы наверное из этих соображений исходил

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Да я тоже несколько раз сказал что главное качество кода и испоганить можно любую платформу, то что сделано на "лучшей" платформе не гарантирует лучший результат. Но повторяюсь: увидел статью где говорилось что нода быстрее, причем с тестами. До этого видел видео (пару лет назад) где "нодер" просто рассуждал что нода быстрее всего. Первое что приходит в голову (на ноде я не делаю свои проекты) может действительно нода лучше? Сделал тесты - нет не лучше. А так я не настаиваю и давно вышел из возраста холиварщиков, кому что нравится тот на том и пишет.

  • @grenadier1653
    @grenadier1653 2 роки тому +3

    Нод js поддерживает многопоточность. cluster, worker_threads, child_process

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Это не многопоточность. Я про это сейчас делаю видео. А если в крации это горизонтальное масштабирование сервиса. Есть большая разница, а то мне недавно на собеседовании убеждал соискатель убеждал что в js в браузере если сделать setTimeout это тоже будет параллельная работа. Нужно понимать что это и как оно работает, какие преимущества и недостатки

    • @grenadier1653
      @grenadier1653 2 роки тому +4

      @@Kulibins1
      Из официальной документации ноды:
      "The node:worker_threads module enables the use of threads that execute JavaScript in parallel".
      Также, неблокирующий I/O работает засчет libuv, которая, в свою очередь, использует отдельный поток.
      setTimeout - и правда ничего общего с параллелизмом не имеет. Это асинхронное программирование. Я про это и не говорил

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@grenadier1653 про setTimeout я написал как пример абсурдного заблуждения. Тут тоже самое, потоки в node это на самом деле не потоки, а отдельные процессы. Это не есть плохо, у каждого подхода есть свои недостатки и преимущества. Скоро будет видео на эту тему

  • @ilyachursin7369
    @ilyachursin7369 2 роки тому +3

    Number - это не double из C#. Представление чисел в движке V8 - это весьма комплексная вещь (SMI & Double), которая во многом скрывает реализации под капотом, а сверху еще и JIT добавляет оптимизаций.
    Учитывая, что явных присваиваний дробных чисел нет, переменная меняется в цикле, то я уверен, что там точно такой же int, как и в C# на выходе будет (вы можете прекрасно раскрутить всё и посмотреть, в какие представления оно раскручивается, как в том же sharplab)

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Не нужно придумывать 😉: Обычные числа в JavaScript хранятся в 64-битном формате IEEE-754, который также называют «числа с плавающей точкой двойной точности» - это из документации

    • @ilyachursin7369
      @ilyachursin7369 2 роки тому +1

      @@Kulibins1 гуглите в сторону SMI (Small Intergers) в движке V8, будете ОЧЕНЬ сильно удивлены. а по поводу реализации стандарта IEEE-754 - SMI никак ему не противоречит от слова совсем

    • @Kulibins1
      @Kulibins1  2 роки тому

      @@ilyachursin7369 ну тогда node еще медлее, если она проиграла честному double. Кроме того в моём примере с картой, там все вычисления с double и их ни как не оптимизируешь. И т.к. их не мало разница в 5 раз. В общем в моём утверждении что number = double есть возражения?

    • @ilyachursin7369
      @ilyachursin7369 2 роки тому +1

      @@Kulibins1 конечно есть, number - это НЕ double, как минимум из-за того, как оно реализовано внутри

    • @ilyachursin7369
      @ilyachursin7369 2 роки тому +5

      А то, что node.js проигрывает - оно и понятно. Числадробилки - это явно не тот бенчмарк, в котором nodejs сильна :) да и приминительно ко всем тестам, явно оно будет проигрывать шарпам. Тут как бы классические холивары на тему - А ЧТО ЖЕ БЫСТРЕЕ (ирония на тему - пишите на asm, там уж точно быстрее всего)

  • @АндрейУдовица-ъ1и
    @АндрейУдовица-ъ1и 2 роки тому +4

    Было бы не плохо переделать последний тест на С# без unsafe и посмотреть разницу.

    • @Kulibins1
      @Kulibins1  2 роки тому +4

      В видео про натуральную сортировку у меня были варианты. Тут именно была цель показать что с оптимизацией будет огромная разница. Теперь вот хочу с Rust сравнить 🤣

    • @vasiliigodunov1746
      @vasiliigodunov1746 2 роки тому

      Сейчас уже не будет никакой разницы (я проверял). В C# довольно хорошая оптимизация. Есть неочевидные способы оптимизации кода, но они не связаны с unsafe.

    • @alazarn7
      @alazarn7 Рік тому

      А можно не страдать хернёй

  • @TheLevius
    @TheLevius 2 роки тому +1

    А нафига синхронно читать файл на ноде? В статье конечно тоже синхронно читают, но это же принципиальный момент. Или может я чего не улавливаю?

    • @Kulibins1
      @Kulibins1  2 роки тому +1

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

    • @steel1004
      @steel1004 2 роки тому +3

      На ноде надо читать файл стримом и сразу пайпить в рес

  • @AlexM-gn7bp
    @AlexM-gn7bp 2 роки тому +1

    Суперское видео, где видел по той же логике сравнивали ПХП с шарпом и кричали смотрите какая пыха быстрая))

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Хоть на PHP можно и делать web api, но в основном делают серверсайд рендеринг приложения, а этотс моей точке зрения уже не имеет смысла. Кроме того интерес к PHP снизился очень сильно и вероятно останется только на Легаси проектах. В общем сомневаюсь что кто-то из новичков сейчас начнёт его изучать. Поэтому даже если увижу что кто-то скажет что PHP быстрее, то я посмеюсь и не буду "опровергать". Тут от сравнения с js словил замечаний, то тесты (которые из статьи) не те, то мол нода многопоточная (это не так, народ путает отдельные процессы worker thread с потоками - запишу про это видео) то кластер не запустил, то еще что-нибудь. ПРОТИВ НОДЫ НЕ ИМЕЮ НИЧЕГО ПРОТИВ, вполне рабочая вещь.

    • @AlexM-gn7bp
      @AlexM-gn7bp 2 роки тому +1

      @@Kulibins1 Спасибо за развернутый ответ. По комментариям нужно бить только конструктивными примерами. Ждем новых видео.

  • @artjombrehhunov6068
    @artjombrehhunov6068 2 роки тому +2

    Глянул репозиторий для С#. Не увидел включенным ServerGC ни в проекте ни через рантайм конфиг. Может стоит через environment variable, но если тесты были с GC in Workstation Mode, что скорее всего и было, иначе на 100 процентов бы загрузил проц, то стоит врубить серверный и перепроверить))

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      Да запускал в десктопном режиме. На работе автоматом собирается докер образ уже под серверное применение и я это упустил при запуске. Обязательно перепроверю

  • @vinogradova619
    @vinogradova619 2 роки тому +4

    Классный материал 👍А где же эльфы? (эту шутку знают, толко те кто в теме)

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Эльфов нет 🤣

  • @user-0xDEEDBEEF
    @user-0xDEEDBEEF 2 роки тому

    Правильно ли я понял что С# не использовал многопоточность и загрузка была только одного ядра в обоих случаях?

    • @Kulibins1
      @Kulibins1  2 роки тому

      Как минимум была запущена с десктопным приоритетом

    • @user-0xDEEDBEEF
      @user-0xDEEDBEEF 2 роки тому +1

      @@Kulibins1 я не о приоритетах. Насколько я понял ваш тестовый клиент имитировал паралельных клиентов. В этом режиме очень важно распараллелить сервер. В nodejs это нужно делать в явном виде, чего небыло сделано. Если C# распараллеливает по умолчанию то ваше доказательство неверно.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@user-0xDEEDBEEF там и одиночные запросы на .net быстрее если они хоть что-то реально делают. Уже комрад нодер запустил ноду в кластере и сравнил. У него похоже упёрлось в пропускную способность на Фибоначчи, а вот тест с сортировкой всё равно в разы быстрее на c#. Как бы Обалденно не оптимизировали Js (а они реально сделали практически чудо) c# быстрее. Кстати я тут подумал и тесту карты на Js я подыграл, т.к. по хорошему раз я с точками в c# работаю со структурами, то в Js я должен был использовать объекты, но я переписал математику что бы не было этих объектов, работа была только с массивом number

    • @user-0xDEEDBEEF
      @user-0xDEEDBEEF 2 роки тому +1

      ​@@Kulibins1 ну понятно что и при распараллеливании js упрётся. Вопрос был только в эквивалентности вашего сравнения.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@user-0xDEEDBEEF каждый под в кластере стоит денег. Например у нас на каждый cicd-шники еще 0.3 ядра вешают типа на обслуживание + балансировщик для кластерера из ноды. А эти вопросы я даже не сравнивал 🤣, С учетом что и в однопотоке c# быстрее.

  • @VovanEkb
    @VovanEkb 2 роки тому +3

    брать ноду для Cpu bound операций.. эт странно кшн, нода ж в io хороша вполне. Да и кушает сильно меньше

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Первые 3-и теста из статьи.

  • @cornknight
    @cornknight 2 роки тому +3

    Node.JS он не про скорость и не про оптимизацию, он про business needs. Когда хочется иметь команду, в которой бэкендеры и фронтендеры хотя бы частично взаимозаменяемы и какие-то наработки использовать и на фронте и на бэке. Тогда и мобильные приложения можно делать на React Native - вообще красота!

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Да я ж что против? Еще раз увидел статью где сказано что нода быстрее, решил перепроверить. Вот результат. А так да если есть хороший разработчик js, то ему бэк легче написать на ноде чем учить что-то другое. И как я сказал скорость js по сравнению что было раньше очень хороша и для многих задач её за глаща. Но вот лично у меня есть задачи где нода ни как не справится, это кстати не обязательно вычислительные задачи, например общение с оборудованием по низкоуровневым протоколам. Ну и вычислительные задачи, особенно со специальной оптимизацией на c# быстрее. Кстати кто знает на доде есть реализации DI (для фронта есть в Angular, а для бэка?)

    • @Алексей-ъ2ч8э
      @Алексей-ъ2ч8э 2 роки тому

      @@Kulibins1 nest.js

    • @uvwzyx
      @uvwzyx 2 роки тому

      в таком говностартапе я бы никогда в жизни не стал работать, если аргументом выбора ноды является "один язык на фронте и бэке". многие фронтендеры даже жс экспертно не знают из-за формошлепства, а их еще на бэкенд пускают

    • @alexplay9719
      @alexplay9719 Рік тому

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

    • @alazarn7
      @alazarn7 Рік тому +1

      @@uvwzyx тебя и не позовут) хаха

  • @gobpblueex
    @gobpblueex 2 роки тому +10

    Есть подозрение что исходная статья просто развод, примерно как в анекдоте про негров и баскетбольный мяч, сколько уже таких было, и сколько еще будет ...
    И хотя результат очевиден заранее, но разбор полезен и интересен. Еще интереснее было бы добавить Java, возможно еще что-то новомодное, типа Go или Dart.
    Ноду корректнее сравнивать в PHP и Python, хотя последний вероятно будет в аутсайдерах.

    • @Kulibins1
      @Kulibins1  2 роки тому +4

      Дальше буду делать и с другими языками, раз тема зашла.

    • @vas_._sfer6157
      @vas_._sfer6157 2 роки тому +1

      @@Kulibins1 Думаю у Rust есть шансы уделать C#. Все-таки unmanaged code и мощная семантика.

    • @Kulibins1
      @Kulibins1  2 роки тому

      @@vas_._sfer6157 может и есть, только тут уже скорость разработки упадёт и стоимость сопровождения увеличится. И нужно тестировать, что бы сказать на сколько разница. Может кто сможет мои тесты переписать, для сравнения?

    • @vas_._sfer6157
      @vas_._sfer6157 2 роки тому +1

      @@Kulibins1 Ну не знаю. Непонятно с чего она вдруг скорость разработки должна уменьшиться. Да и фреймворков уже полно, нет проблемы ни с чем.
      Единственное проблема - это относительно долгая скорость компиляции для больших проектов - но это фиксится разбиением проектов сначала просто на крейты, а потом и на микросервисы, если они нужны.

    • @Kulibins1
      @Kulibins1  2 роки тому

      @@vas_._sfer6157 если разбираетесь, то можно мои тесты переписать и сравнить какая будет разница.

  • @liliya433
    @liliya433 2 роки тому +3

    так, хорошо, а на golang? )

    • @Tosha.V
      @Tosha.V 2 роки тому +1

      то же интересует

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      Не работал с Go, могу конечно сделать по аналогии.

    • @Tosha.V
      @Tosha.V 2 роки тому +1

      @@Kulibins1 ждем с нетерпением

  • @levkirichuk
    @levkirichuk 2 роки тому +7

    Отличное сравнение 👍
    + За нодой что на фронте и бекенде используют один язык.
    Хотелось бы увидить сравнение выдачи через REST API, так в практике это то что используют.
    Лично сам я предпочитаю C#.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      ну тут как раз был REST, правда только геты.

    • @ЭдуардКузнецов-ы7у
      @ЭдуардКузнецов-ы7у 2 роки тому +1

      В .NET также можно использовать C#, что на стороне бэка, что на стороне фронта. Правда, без редких обёрток над JS, не обойтись…

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@ЭдуардКузнецов-ы7у да blazor. Но посмотрите видео, ссылка в описании, где я сравнил производительность Blazor, она ОЧЕНЬ плохая.

    • @ЭдуардКузнецов-ы7у
      @ЭдуардКузнецов-ы7у 2 роки тому +1

      @@Kulibins1 , если я правильно помню, у Майкрософт в документации у Blazor стоит статус «Non-production»…

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      @@ЭдуардКузнецов-ы7у У Blazor как бы 2 режима серверный рендеринг и клиентский. Смысл в серверном рендеринге не вижу, даже из Angular его выпилили. А клиентский, через wasm даже с бэка запрос (увесистую json-ку) получает в разы медленее чем обычный js. Я после этого не стал глубоко изучать документацию по Blazor, т.к. смысл изучать, то чем не буду пользоваться, хоть и .net + c# дольше всего занимался.

  • @ПавелЗубов-ю5в
    @ПавелЗубов-ю5в 2 роки тому +2

    3:23 "Оптимизатор js берет и выкидывает всё что написано до..."
    Приведите пруфы, звучит очень смело))

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Тут смотрел по тестам, если ничего не менялось во вне, и результат не возвращался, то скорость такая, как будто-то выкинул. Как только возвращаешь, то скорость резко снижается

  • @antonb1467
    @antonb1467 2 роки тому +2

    Спасибо за интересное сравнение.
    Интересно было бы еще сравнить их в облаке в условиях когда они создают одинаковую нагрузку на сервера, так будет совсем честно и приближено к реальности.
    Понятно что шарп быстрее, но будет ли он настолько же быстрее в таком случае )

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      А чем облако отличается от того что мы тестируем? Только тем что канал связи может оказаться узким местом?

    • @vasiliigodunov1746
      @vasiliigodunov1746 2 роки тому +1

      @@Kulibins1
      о том и речь. Если канал связи будет например через WCF (которую в Core подымают из могилы), то потери на транспорте будут огромные.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@vasiliigodunov1746 зачем wcf? Есть grpc, есть шина. Я уже отказался от wcf давно. Да и то когда для wcf сделал свой сериализотор, то и wcf был быстрым

    • @vasiliigodunov1746
      @vasiliigodunov1746 2 роки тому +1

      @@Kulibins1
      я тоже думал, что WCF был быстрым, но тесты показывали обратное. В нём были большие потери на этапе применения всех его замечательных декларативных политик. К каналам претензий нет.

    • @vasiliigodunov1746
      @vasiliigodunov1746 2 роки тому

      @@Kulibins1
      ну а если взять тот же grpc и примотать к нему аутентификацию по SSL сертификату, то замечательная технология Google превращается в шлак от MS :)
      MS гениально умеет добавлять проблемные зоны в транспортные протоколы

  • @valera924
    @valera924 2 роки тому +6

    Приятно, когда любимая технология побеждает :) Вообще, давно уже известно, что любые статьи с тестированиями больше говорят не об участниках тестирования, а о составителе тестов. Какой специалист - такие и тесты. Очевидно, автор статьи - так себе специалист

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Странно что у автора статьи и в профиле написано .net developer. И тесты притянул он за уши, и если бы повторно их запустил даже на своей программе, они бы показали другие результаты. Node.js тоже хорошая технология и очень даже применимо, но по сложности написанию кода как минимум не проще чем на c# написать (вон в его де примере кода на c# меньше нужно чем на js) а результат у . net лучше. Тут говорят про кластер, но клатер тоже вносит свой минус как в скорость, так и в стоимость, хотя если нужно на любой платформе можно кластер сделать.

    • @valera924
      @valera924 2 роки тому

      @@Kulibins1 насколько я понимаю, node cluster делает ровно то, что у .net идет "из коробки" - многопоточность. Ради интереса можно пойти другим путем - урезать thread pool у .net до одного свободного потока для равных условий

  • @avpmk
    @avpmk 2 роки тому +1

    11:46 Ну конечно хорошо, что он может находить мёртвый код и не исполнять его. Это полезная фича даже для нормального кода. JVM тоже так делает.

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      но когда это для теста используют, то наверное это не правильное сравнение.

    • @avpmk
      @avpmk 2 роки тому

      @@Kulibins1 Да, конечно, оригинальный бенчмарк был некорректный.

  • @exter6662
    @exter6662 2 роки тому

    ответы на ответы и переметка особенно понравились

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Как-то не понятна мысль коммента, если честно.

    • @exter6662
      @exter6662 2 роки тому

      @@Kulibins1 ты не внимательно смотрел это очевидно

  • @dmitriyobidin6049
    @dmitriyobidin6049 2 роки тому +5

    Помоему давно известно, что нода хороша там, где все упирается в IO операции. Брать ноду для числодробилок - себе вредить.

    • @Kulibins1
      @Kulibins1  2 роки тому +5

      Потому когда оно упирается в io, тогда и питон можно взять или что там еще медленее?

    • @dmitriyobidin6049
      @dmitriyobidin6049 2 роки тому +2

      @@Kulibins1 Причем тут медленнее или нет. Как будто если весь мир не построен на .Net то значит все вокруг идиоты :) У питона из коробки не будет асинхронщины, вроде как. Или, например, нет у вас питонистов сейчас в пуле разработчиков в данной компании, это что теперь, проект останавливаем и идем питонистов искать? Не всегда и везде нужна максимальная скорость, а там где нужна можно и го с растом с таким же успехом взять.

    • @Kulibins1
      @Kulibins1  2 роки тому +5

      @@dmitriyobidin6049 В нашей компании есть похоже все, и питонисты в том числе. Я все к тому что скорость разработки везде +/- одинакова если вы специалист, то одинаково быстро и качественно напишете на своей платформе код, так же как и другой специалист на своей платформе, Но если на одной платформе код быстрее работает, больше запросов обрабатывает, меньше ресурсов потребляет, то как бы это же лучше? 😉

    • @dmitriyobidin6049
      @dmitriyobidin6049 2 роки тому +1

      @@Kulibins1 Я не спорю, это хорошо. Но это не единственный критерий выбора платформы для разработки. И даже не всегда этот критерий на первом месте.

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      @@dmitriyobidin6049 по многим другим критериям .net однозначно хорош. Например и игры делат (unity), и бэк и десктоп (хотя я от отказался, до этого много лет занимался wpf), фронт вон тоже делают (но тут я считаю что пака перспективы плохие). Код довольно надёжный (сборщик мусора ), быстрый, в некоторых случаях ультимативный и сравним с кодом на С (Rust не занимался с ним не сравниваю), всё что можно и нужно есть в библиотеках (справедливости ради сейчас во всех современных платформах все есть). Работает на всех операционках (многие наверно думают что только по виндой?, так нет под любыми линуксами тоже работает). Язык C-подобный перейти на него нет проблем ( вон все рассказывают какой питон простой, а на деле, он по сложности не уступает другим языкам). Сама платформа постоянно развивается (под ту же ноду, насколько знаю как- притихло). Какие еще у вас критерии?

  • @MrCommanderKid
    @MrCommanderKid 2 роки тому +1

    Отлично! Слышал, что управление телескопа Джеймс Вебб на js написано. 😬

    • @Kulibins1
      @Kulibins1  2 роки тому +4

      да можно хоть что сделать на чём угодно. но если вы хотите приблизится реалтайму, то js довольно плохо, и .net плохо, но во много раз лучше в этом плане.

    • @GreenDimka1
      @GreenDimka1 2 роки тому +1

      Нет, js там выбран в качестве скриптового языка для коммандования системами. Т.е. там не то же, что node или v8.

  • @NickAlexandrov
    @NickAlexandrov 2 роки тому +2

    Посмотрев код автора, захотелось его развидеть. Такое ощущение, что автор до этого момента писал JS только для браузера… о каком объективном сравнении может идти речь, когда код, написанный как под браузер, сравнивается с кодом, написанным под бек.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      А какой вы код посмотрели? Взятый из исходной статьи?

    • @NickAlexandrov
      @NickAlexandrov 2 роки тому

      @@Kulibins1 смотрел только тот код, который вы в GitHub выложили.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@NickAlexandrov так там изначально код из статьи, то что я добавил 2-а теста, это с подготовкой данных для отрисовки карты, и код сравнения строк для натуральной сортировки. В тесте Фибоначчи сделал вывод значения вместо "done". Ничего координально в запуске не менял, т.к. потом скажут что из-за того что на экспресс поменял или еще что - не соответствует тому что в статье было. И просто интересно что конкретно не нравится?

    • @NickAlexandrov
      @NickAlexandrov 2 роки тому +2

      @@Kulibins1 как минимум то, что в любом запросе, даже когда req.url = “/” обрабатываются и остальные if, а также создаются объекты rect, pr и строки STR1, STR2. Затем readFileSync моветон так как блочит eventloop. В /map тяжелые stringify и build выполняются в каждом запросе, хотя в этом нет смысла, затем в натуральной сортировке к строке прибавляется число и циклы while блочат eventloop пока не вернут результат. Ещё обилие генераторов прям из мира фронта всю производительность кладет на лопатки.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@NickAlexandrov Пробовал применить express ни какой разницы. все константы вынес из функции - это дало +1.5 вызова в секунду т.е было 96.3 стало 97.8 запросов в секнду . соотношение это ни как не поменяло. И выводы ни как не изменились. Жду еще недостатки, которые изменят картину.

  • @russiananimeproject3062
    @russiananimeproject3062 2 роки тому +1

    Было бы интересно проверить заодно низкоуровневую JS оптимизацию в виде asm.js. Механизм старый и потому новомодный синтаксис не понимает (да и с точки зрения ES5 выглядит очень не очень), но использует AOT компиляцию и позволяет использовать вычисления с целыми числами, что в сравнении с нативным кодом на double позволяет добиться ускорения в 5 раз (если сравнивать с целыми в нативном режиме то всего в ~3 раза). Правда для кода вроде чисел Фибоначчи нужно использовать рандомизацию, иначе срабатывает какой-то встроенный кэш результатов.
    В node.js вообще можно добиться каких-то совершенно абсурдных оптимизаций производительности. Как то, что цикл:
    for (let i = 0; i < steps; i = (i + 1) | 0) {/* Фибоначчи на целых в стиле asm.js */}
    Будет на 20% быстрее чем дефолтный js цикл
    for (let i = 0; i < steps; i++) {/* Фибоначчи на целых в стиле asm.js */}

    • @Kulibins1
      @Kulibins1  2 роки тому

      Asm.js вроде как умер, есть wasm, а то что в коде | 0 как раз делает целое число

    • @vasiliigodunov1746
      @vasiliigodunov1746 2 роки тому +2

      Ни те, ни другие тесты не заслуживают доверия. Слишком много факторов, вносящих замедление в вычисление. Включая даже возможный троттлинг на simd без водяного охлаждения на процессоре.
      Но, конечно, вызывают жалость эксперты, на серьёзных щах рассказывающие, что жаваскрипт быстрее сишарпа.
      Сравнение с жава и плюсами интересно. С жаваскриптом и питоном - нет.
      Причём, я даже могу поверить что обвязка может ускорить вызов node.js до такой степени, что он обгонит .net.
      Но само вычисление тут вообще ни при чём.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      @@vasiliigodunov1746 кстати если посмотрите моё видео про рабочее место, то у меня водянка 😉

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@MsTim159 она вроде как умерла

    • @russiananimeproject3062
      @russiananimeproject3062 2 роки тому

      @@MsTim159 Как уже написал Александр, asm.js мертв. Никто всерьез на нем не пишет (разве что какой-то легаси код), но его наследие все еще живет в JS движках (я про SpiderMonkey и V8).
      Сейчас для решения тех же задач есть WASM и AssemblyScript компилируемый в него. Или Emscripten для C и C++. Также язык имеющий компилятор для LLVM потенциально тоже умеет компилироваться в WASM.

  • @dozaprod.4637
    @dozaprod.4637 2 роки тому +2

    нормально нод посмоктал)

  • @Lucio11a
    @Lucio11a 2 роки тому +1

    Все таки правильно я выбрал язык для изучения :D
    Правда его я тыркаю в аспекте игростроя на юнити, но даже так ощутил его возможности по оптимизации...

  • @r00t3g
    @r00t3g 2 роки тому +1

    Будучи человеком, который чуть-чуть знаком с node/v8 internals, C#/.NET/Mono, а также с разными другими интерпретаторами, компиляторами (в т.ч. JIT/AOT), могу сказать лишь, что тесты не показательны. Что в исходной статье, что в видео. Уш прастити.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Те что мои это куски из моих реальных проектов, так что для меня они показательны.

  • @Видеодневник-г2у
    @Видеодневник-г2у 2 роки тому

    Спасибо за интересное видео.
    Очень похож на Девида Дреймана из Disturbed.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Если честно не знаю про кого говорите 😊

  • @sergeibergen9963
    @sergeibergen9963 2 роки тому +1

    Класс

  • @syrymjoli
    @syrymjoli 2 роки тому

    Наконец-то ТОЧКА .

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      требуется пояснее, что имелось ввиду 😉

  • @yuriibesedin4418
    @yuriibesedin4418 2 роки тому +1

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

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Фибоначи это из исходной статьи, сортировку вставил я, т.к. у меня были видео с примером натуральной сортировки и там и там, карта тоже мой пример и тоже было видео про это. То что большая часть задачь - это элементарная прослойка между БД и фронтом, так тут всё будет в базу упираться 😁

    • @yuriibesedin4418
      @yuriibesedin4418 2 роки тому +1

      @@Kulibins1 ну так к автору исходной статьи тоже вопрос зачем забивать гвоздь микроскопом? нода хороша для постороения апи имхо это и надо сравнивать, а если нужна математика то плюсы вам в помощь или прости господи асм

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@yuriibesedin4418 сложность написания кода на c# я бы сказал что даже меньше чем на Js, а дальнейшее сопровождение уж точно проще у C#, т.к. очень много ошибок Js отлавливаем не во время компиляции, а в рантайме. Вон даже код у шарпа компактнее, он быстрее. Тут хотя бы TS нужно использовать вместо ванильного js. Тут просто если спецу по Js нужно бэк писать, то что бы не переучиваться, то node.js выход. .net c# высокоуровневый быстрая платформа, а вот во многих других мы видим либо высокоуровневы и "медленный" либо низкоуровневый и "быстрый"

    • @yuriibesedin4418
      @yuriibesedin4418 2 роки тому +1

      @@Kulibins1 ну на вкус и цвет все фломастеры разные. Просто если заговорили про быстродействие его бы и сравнить, а удобство написания это отдельная тема хотя я наверное соглашусь что шарп довольно передовой в этом смысле ибо они не парятся по поводу обратной совместимости как в жаве и быстро развивают язык

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@yuriibesedin4418 обратная совместимость, то никуда не делась, всё что у вас работало раньше - так и работает.

  • @viktoralferov2874
    @viktoralferov2874 2 роки тому +3

    GO - такой же "тормоз"... ну или может быстрее JS, но медленнее NET (7)

    • @Kulibins1
      @Kulibins1  2 роки тому +1

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

    • @Tosha.V
      @Tosha.V 2 роки тому +2

      пруфы?

  • @i2um1
    @i2um1 2 роки тому

    Я могу разогнать код CompareUnsafe и сам API на .NET 7 на порядки быстрее:
    - 50.55% вызывается метод Concat
    - 10.35% вызывается метод UInt32ToDecStr
    - 6.69% вызывается метод Int32ToDecStr
    - и только какие-то 7.90% тратится на метод CompareUnsafe
    Вариантов как ускорить несколько. Но сразу напрашивается полное избавление от метода Concat и аллокации строк на каждой итерации. Далее, в методе CompareUnsafe не нужно считать num1 и num2.
    Для чего здесь вообще unsafe используется? Чтобы не тратить время на проверку выхода за границы массива? Этим можно пренебречь и остаться в safe.
    Еще в .NET 7 можно включить AOT или ReadyToRun. За счет этого .NET начал безоговорочно уделывать NodeJS в AWS лямбдах. Единственное место, где целесообразно сравнивать .NET и NodeJS. Теперь никакие Cold Start не помогут NodeJS.

    • @Kulibins1
      @Kulibins1  2 роки тому

      Конечно напишите такую функцию и давайте посмотрим (без всякого сарказма). Моя функция была написана много лет назад. По поводу readytorun я тесты запускал несколько раз, поэтому не будет прям такого преимущества. И ещё я в своей функции не вижу ни каких конкатов, потом я не вижу UInt32ToDecStr и не вижу Int32ToDecStr. Мы про одну и туже функцию говорим? Как вы получили эти значения? В профилировщике производительности я их не вижу.

    • @i2um1
      @i2um1 2 роки тому

      Чтобы переписать всю функцию API, надо знать какие изменения допустимые и какие требования к методу CompareUnsafe (ну и свободное время, чтобы написать и измерить через BenchmarkDotNet):
      - строки ASCII, UTF-16LE, UTF-8 или с любой кодировкой?
      - число всегда присутствует в строке?
      - число всегда в конце строки?
      - Может быть несколько чисел разделенных другими символами?
      - CompareUnsafe должен сравнивать что-то похожее на строку?
      - Пробелы, табуляции и так далее допустимы в конце строки?
      - Учитывается культура или побайтовое сравнение? Учитываются диакритики?
      Опишу два способа избавления от string.Concat:
      1. Создать 2 буфера символов с заведомо большим размером (чтобы поместить туда строку и число) и передать 2 слайса Span в метод CompareUnsafe
      2. Создать 2 двоичных буфера с заведомо большим размером (например через маршалинг) и передать Memory в CompareUnsafe
      Чтобы избавиться от num1 и num2, числа не обязательно умножать на 10. Допустим есть две строки:
      abc1000
      abc00100
      Сначала необходимо доказать, что строки одинаково начинаются. Потом, если идти с конца строки, то достаточно знать результат сравнения предыдущих символов и текущих символов, пока не закончится число. Т.е. сложность алгоритма O(n) при простом побайтовом сравнении.
      Для профилирования я использовал dotTrace с профилировщиком Tracing и включенным Real time (performance counter): i.imgur.com/096OmwJ.png
      Метод Concat взялся неявно из операции складывания строк:
      sharplab.io/#v2:EYLgtghglgdgPgAQEwEYCwAoBBmABM3AYVwG9NcL88EAWXAWQAoBKU8yjgNwgCdcJcAXlwAiCMADGIgNzsOFbn2BDRAEwCmAMxlz5CFAE5GAgNS5gzWRg4BfTDaA
      Реализация: referencesource.microsoft.com/#mscorlib/system/string.cs,3187
      У числа же неявно вызывается метод ToString:
      sharplab.io/#v2:EYLgtghglgdgPgAQEwEYCwAoBBmABM3AYVwG9NcL88EAWXAWQAoBKU8yjgNwgCdcJcAXlwAiCMADGIgNzsOFbn2BDcAVlkZ5lBCgCcjAQGpcwZho4BfTBaA=
      Реализация: github.com/dotnet/corert/blob/master/src/System.Private.CoreLib/shared/System/Int32.cs#L80
      ReadyToRun и AOT влияют только на холодный старт и JIT оптимизации. Функция прогревается в JIT через пару вызовов, поэтому в конкретном случае разница минимальна.

    • @Kulibins1
      @Kulibins1  2 роки тому

      @@i2um1 у вас может быть профилировщик показывать и работу самого asp.net core , поэтому вы видите еще и то что написали. В моей функции нет операций соединения строки. По существу это функция сравнения для натуральной сортировки, в ней сравниваются 2-е произвольных строки, в которых могут быть (а могут и не быть числа) указанный вами пример моя функция легко сравнит. Что-то мне кажется что не напишите вы оптимальней тому что в моём примере 🤣 Нет в моём примере складывания строк, где вы его нашли? Так же нет у числа и toString (хоть явного, хоть не явного)

    • @i2um1
      @i2um1 2 роки тому

      @@Kulibins1 создал issue на гитхабе.

  • @Disorrder
    @Disorrder 2 роки тому +1

    Реквестирую тот же тест на Rust! 😮

  • @jekaavhachev1962
    @jekaavhachev1962 2 роки тому +1

    Короче понятно. Что кому нравится, то и будет он(она) хвалить. Вот все вы так паритесь за производительность))) если вам хочется быстрее, то пишите на c++/c. А так рассуждения, что быстрее, на уровне переменных такое. В реальности большинство не парится о производительности, а пишут лишь бы работало. Это если уже стоит задача оптимизировать, то да. Уже начинают задумываться. А может я ошибаюсь)))

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Дело не в том что хвалю что нравится, а как сказал в начале ролика: увидел статью, в которойтговорилось что нода быстрее меня это смутило, решил перепроверить - и вот результат. Далее на примере теста с сортировкой, не будет c++ быстрее, а будет тоже самое 🤣. Т.е. я могу написать на c# код который будет по производительности практически идентичным коду C. Хочу это как раз выяснить при сравнении с rust

    • @jekaavhachev1962
      @jekaavhachev1962 2 роки тому +1

      @@Kulibins1 вы всё хорошо рассказали. Я не конкретно про вас говорю. Я в общем про комментарии. Многие здесь комментаторы пытаются доказать преимущества того или иного языка. Но ведь у одного языка есть одни плюшки, которых у другого нет и наоборот. Просто провести сравнение - интересно. А вот уже что лучше, будет спор, в котором не будет победителя. Кто-то к одному привык больше, кто-то к другому. Мне, к примеру, сложновато воспринимать работу js, с его асинхронностью, но это же не значит, что он плохой. Так же и не значит, что он хороший. Это всего лишь особенность языка. Сам я сижу на С#) Короче, комментаторы(не автор видео), не хейтите другие языки. Даже если вы думаете, что не хейтите, но на самом деле так выходит))) Надеюсь, получилось донести мысль.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@jekaavhachev1962 я говорил что мне нравится js в виде ts. И некоторые фишки из него я хотел бы видеть в c#. Меня просто смутила статья, вот и получилось видео. А так я сам фронт делаю на Angular(ts), а не на blazor(c#). Так что все современные языки имеют своё применение и тех кто их любит.

  • @ruffle17
    @ruffle17 2 роки тому

    когда сравнивают нод с си шарпом по производительности это уже уровень.. это как рнр-сты в свое время сравнивали и говорили не ну да шарп же компилируемый поэтому то быстрее но наш жмыхапэ остает совсем чуть-чуть. А вообще про многопоточность шарпа и однопоточность ноды там есть какой-то экспленейшн когда нода с одним потоком уделывает шарп видел где-то крутого нодера который норм раскидывал почему нода обыгрывает шарп но это узкий сегмент задач

    • @Kulibins1
      @Kulibins1  2 роки тому

      Еще раз. Увидел статью где говорилось что нода быстрее. Решил проверить, т.к. а вдруг 🤣

  • @AurumCode-17
    @AurumCode-17 2 роки тому +1

    Если сейчас все js с ts используют!

    • @Kulibins1
      @Kulibins1  2 роки тому

      Я как бы тоже на чистом js очень редко пишу, но для этого теста специально оставил чистый JS что бы мне потом не сказали что я не то сравниваю.

  • @32zim32
    @32zim32 Рік тому

    А лучше взять раст и писать и быстро и удобно и безопасно

    • @Kulibins1
      @Kulibins1  Рік тому

      Видео с rust почти готово. Но Rust один из самых сложных языков, а результат будет в новом видео.

  • @Явижусвоимиглазами

    Спасибо за обзор, Сшарп рулит!

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      Всегда пожалуйста 😉

  • @mamkinproger
    @mamkinproger 2 роки тому +1

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

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      У меня канал в принципе для более продвинутых разработчиков. Хоть есть и для начинающих материалы. Для начинающих очень хорошие материалы по фронту у Владилена Минина. У меня есть 2 видео про каналы которые рекомендую и там может быть что пригодится. Для бэка C# прочтите для начала книжку Рихтера (что бы понимать c# и . net), после этого можно уже мои видосики как по rest посмотреть, я почти всё что нужно рассказал.

    • @mamkinproger
      @mamkinproger 2 роки тому +1

      @@Kulibins1 За книгу крайне благодарствую) На работе как раз бэк с использованием или на (понять не могу как правильно) .NET сделан. Руки все тянутся к Ангуляру. Так что кто знает, может быть недофуллстеком пополнится наш мир в будущем) Спасибо за те видео, где советовали каналы других ютуберов

    • @ivantut9210
      @ivantut9210 2 роки тому

      @@Kulibins1 Эту книгу вообще начинающим не стоит рекомендовать, а то руку не только к Ангуляру потянутся, а еще и к пистолету)))

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@ivantut9210 Рихтера вроде про .net книгу имел ввиду. Или это у вас такое завуалированное оскорбление? 🤣

    • @ivantut9210
      @ivantut9210 2 роки тому +1

      @@Kulibins1 никого не хочу оскорбить, только хотел сказать, что Дж Рихтер "CLR via c#", не для новичков совсем, может оттолкнуть вообще от изучения этого направления.

  • @Дзмтрый-л9в
    @Дзмтрый-л9в Рік тому +1

    C# - сила!))

  • @DmitriTrofimov
    @DmitriTrofimov 2 роки тому +1

    Переменную цикла в C# тоже нужно было бы сделать даблом, хотя я сильно сомневаюсь, что это существенно повлияет на результат.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Не повлияет. На операции с циклом меньше всего ресурсов тратится.

    • @yoloopen
      @yoloopen 2 роки тому +2

      @@Kulibins1 number в JS это не обязательно double, а на усмотрениие движка. Код не идентичный получился, функция в JS на каждый запрос заново аллоцирует "rect" и "pr", проверяет req.url в каждом условии..Сортировка в JS написана максимально медленно, с созданием объекта в цикле, в то время как в C# заявлена "самая быстрая функция".

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@yoloopen если вычисления идут с double и там и там, то и тут и там будет double что бы не думал движок v8 🤣 Вынести rect и pr, ничего не поменялось. И в c# rest и pr это переменные функции main скрытой под капотом. Можете предложить свою функцию натурального сравнения (обратите внимание на слово натуральное)

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@yoloopen только что замерил если вынести все эти переменные до вызова createServer, то увеличится на 1,5 запроса в секунду, было 96.3 запроса в секунду, а стало 97.8, т.е. если честно существенно разница не изменилась, а так спасибо за совет. Для JS eсть стандартная функция натурального сравнения через localeCompare, но оно ещё хуже работает, причём заметно

  • @СерёгаСокольский
    @СерёгаСокольский 2 роки тому +1

    Unsafe в c# - это плохая практика. Уж лучше тогда взять Rust - Actix Web. Там сразу двоичный код исполняется. Node.js в принципе не может быть быстрее с одним потоком и динамической типизацией. Расчет типов и исполнение в одном потоке как раз жирный минус ноды.

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      И чем же она плохая? Просто когда не умеют писать, то можно накосячить 🤣 а так это очень даже применимо. Далее есть еще simd команды они тоже есть в . net, но это еще более низкоуровнево, но ведь тоже кто-нибудь скажет зачем. Мне java разработчики говорили зачем переопределение операторов (есть в c#, нет в java), да и зачем структуры и многое другое.

    • @СерёгаСокольский
      @СерёгаСокольский 2 роки тому +2

      @@Kulibins1 имею ввиду, что unsafe в C# нужно уметь готовить и правильно совмещать с безопасным кодом. Это мало кто может. По - этому, надёжнее разрабам написать сверхскоростной сервис на Rust и дёргать его. Это если нужны наносекунды и минимум памяти.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      @@СерёгаСокольский да конечно нужно уметь. И главное нужно оптимизировать, то что тормозит, а то сколько угодно можно ускорять, то что в общий вклад вносит 1%, а то что тормозит нет.

    • @alekseybobyr1473
      @alekseybobyr1473 2 роки тому +1

      Node.JS доступна полноценная многопоточность с shared memory. По поводу динамической типизации - она влияет только на производительность первых вызовов функции - потом функция пропускается через JIT. Но и на первых вызовах, если используются более-менее статичных структуры данных, то под капотом они представляются классами C++, и работают с соответствующей скоростью. Так что да, "на старте" Node однозначно будет уступать С#, но если дать JIT разогреться - результаты, вероятно, выровняются

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      @@alekseybobyr1473 .net это изначально jit. И нет не выровняются, а то не придумывали всякие wasm. Но скажу еще раз нынешний JS просто фантастически быстр и для многих задач будет достаточен. Только если писать, то уже на TS, т.к. без типизации, столько ошибок будет в проекте, даже опытные разработчики смотришь косячат на элементарном коде. Но для меня бэк это .net c#, а фронт это angular.

  • @PRO100Spike
    @PRO100Spike 2 роки тому +1

    ну вы тоже не объективны ваш последний тест фуфло, понятно что нода позволяет запускать меньше потоков одновременно но почему вы не снизили в последнем тесте количество до 400х?

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      На один поток последний тест тоже огромное преимущество у кода на c#. Ссылки на код в описании к видео, можно посмотреть.

  • @sergZh78
    @sergZh78 2 роки тому +1

    C# может быть конкурентом Java, но никак не js.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Я тоже везде это говорю, но тут в оригинальной статье автор говорит что мол смотрите какой js быстрый, быстрее c# - а это не так.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      @Cosinus 0 мне кажется php уже все, доживает последние дни в Легаси проектах. Какой смысл в серверном рендеринге сейчас? Современные подходы рулят: микросервисы и фронт spa.

    • @sergZh78
      @sergZh78 2 роки тому

      @Cosinus 0 Для энтерпрайза по сути только 2 варианта есть: .net или Java.
      Это конторы у которых есть все свое, среда разработки, базы данных и т.п.
      Больше никто не может предоставить поддержку сразу по всем направлениям. Серьезные игроки не будут экономить на спичках и брать какой-нибудь PostgreSql или MySql, возьмут готовое и нативное, все и сразу.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      @Cosinus 0 ps: 🤣

  • @dzmitryluhauskoi6363
    @dzmitryluhauskoi6363 2 роки тому +15

    Мультипарадигменность сильно бустит js (ts) в моих глазах по сравнению с С#. Плюс, когда все чем ты занимаешься на беке это ходишь в базу, вся производительность упирается во второй тест, а она в нем ровная. Какой смысл писать на менее удобном языке (литералы js - произведение искусства), который позволяет быстро с числами поиграться, если ты не собираешься с ними играться? Всю тяжелую работу можно выносить в микросервисы или сишные вставки на крайний случай (которые неплохо бы применить в самой производительной версии кода, рас уж ансейв испозьмуем. Вставки для таких случаев и нужны). Вообщем какое-то пустое сравнение, никаких интересных выводов из него не следует.

    • @Kulibins1
      @Kulibins1  2 роки тому +4

      С моей точки зрения самое удобное это c#, у него гораздо больше всяких приятных фишек. В TS есть приятные моменты которых нет в c# и я их тоже хотел иметь, но в в c# гораздо больше всего, чего нет в других языках. По поводу того что только ходит в базы, посмотрите моё видео на главной странице, где я рассказываю про свою SCADA систему, посмотрел бы я как бэк SCADA написать на Js, если это и возможно будет сделать то усилия по сравнению с c# будут во много раз больше. Не все задачи представляют из себя простенькую прослойку между базой и фронтом

    • @GreenDimka1
      @GreenDimka1 2 роки тому +3

      Смысл появляется когда задачи становятся более сложные, чем read-write в базу.

    • @Disorrder
      @Disorrder 2 роки тому +1

      Ну, по сути, любые вычисления, любой код - это «игра с числами». Странное утверждение 🤔
      Раз уж на то пошло, то node.js позволяет писать модули на С++

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@Disorrder тоже самое и на питоне, и для c# можно писать библиотеки на c++ В общем везде 😉

    • @flexxxxer
      @flexxxxer 2 роки тому +1

      в шарпе больше мультипарадигмальности чем в жээсе

  • @СергейКурганов-о2э
    @СергейКурганов-о2э 2 роки тому +1

    Нода обидится, раст позовёт, раст си шарп просто порвёт.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      давай сравним, на этих же тестах.

  • @kokoc58
    @kokoc58 2 роки тому +1

    Да только извращенцы пишут сервер на node 😁

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      как понял народ пишет. В прошлый раз в видео сказал что Blazor которые через wasm работает дико медленно, до сих пор у меня спрашивают а оптимизированную версию ли я сравнивал. А тут виртуальная машина .net работает по верх виртуальной машины wasm, и это медленнее чем обычный JS, причём значительно.

    • @vas_._sfer6157
      @vas_._sfer6157 2 роки тому +1

      @@Kulibins1 А они просто собирают .Net под Wasm? По идее они могли бы некоторые гарантии рантайма переложить на сборщик мусора js, а также завязать некоторые другие рантайм фишки на JS или Wasm рантайм. Чтобы банально было ментше сборщиков мусора и так далее

    • @Kulibins1
      @Kulibins1  2 роки тому

      @@vas_._sfer6157 не всё так просто, по другому не получится .net запустить в браузере. Но главное оно так медленно, что не имеет смысла на больших проектах. Не так критично, но и обратное js хуже на бэке.

    • @vas_._sfer6157
      @vas_._sfer6157 2 роки тому

      ​@@Kulibins1 В любом случае это все извращение. WASM хорош и перспективен в связке с Rust

    • @VoroninPavel
      @VoroninPavel 2 роки тому +1

      @@Kulibins1 так wasm же сильно быстрее JS.

  • @alhimikix5448
    @alhimikix5448 2 роки тому

    а теперь все через mono еще прогнать бы(сервера то почти не держат на шиндовсе)

    • @Kulibins1
      @Kulibins1  2 роки тому +4

      Ничего не понял? Зачем mono? .net уже несколько лет на всех линуксах работает. Вроде в видео про это говорил? У нас в проекте всё в кубер собирается с линуксовыми серверами. mono давно не актуален.

  • @IgrikShit
    @IgrikShit 2 роки тому +2

    выключил на моменте тестирования в браузере на локалхосте. Ваши развенчивания мифов ни чем не лучше чем то что вы развенчиваете

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Там нет тестирования в браузере!!! посмотрели бы внимательно. В браузере я лишь показал странность того что метод rest открывается по разному. А дальше идёт тестирование в JMeter. Вы не правы.

  • @volodymyrbabych8761
    @volodymyrbabych8761 2 роки тому +1

    Для чего использовать var вместо double? В рекомендациях Microsoft четко написано, что var используется исключительно для анонимных типов данных. Использования var очень плохая практика. Разработчики должны внимательно смотреть на то что в правой части записи. Кроме того, в режиме отладки и релиза компилятор может использовать разные типы данных. Так зачем таким заниматься? Visual Studio спокойно предложит дополнить все базовые типы. Лично я не пропускаю PullRequest, где используют var вместо базовых типов данных.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      из правой части чётко видно какой тип данных, и код выравнен а не разбегается из-за старого си-шного синтаксиса. У вас свои требования у меня свои 😉, тут главное единообразие, что бы все делали по одному принципу в одной команде.

    • @nooftube2541
      @nooftube2541 2 роки тому +1

      вкусовщина. У майкрософт рекомендации каждый год на обратные меняются. они в последней версии решили в венгерской нотации вернутся и рекомендуют префикс s_ для статик филдов писать.
      вар удобен, тем что всегда единообразен, плюс позволяет потом безопасно менять типы функций без изменения вызывающего кода.
      ИМХО очевидное знание типа не должно быть необходимо при чтении кода.
      var salesOrder = base.GetDocument()
      зачем мне знать что возвращаемый тип SalesOrder (если это генерик класс к примеру) если семантика прямо это утверждает?
      Особенно я обожаю такое:
      SalesOrder salesOrder = new SalesOrder();
      нужно больше дублицирования!
      Эксплисит тайп нужен только тогда когда необходимо явное знание о типе, но очень часто это признак плохого кода:
      SalesOrder document = base.GetDocument();

    • @retterberg3818
      @retterberg3818 2 роки тому +2

      Не использовать var, вот что такое плохая практика.

    • @ivantut9210
      @ivantut9210 2 роки тому +2

      Проходил стажировку в одной очень крупной компании, которая, если продолжит в таком же темпе развиваться скоро достигнет (лет через 5) компанию Microsoft. var - везде MUST HAVE !!! var - forever!

  • @digitalturkistan1857
    @digitalturkistan1857 2 роки тому +3

    Шарп говнотехнология node. Js forever

    • @Kulibins1
      @Kulibins1  2 роки тому +4

      🤣 потроллил, так потроллил

    • @ivantut9210
      @ivantut9210 2 роки тому +1

      это, как правило, говорят те, кому не хватило мозг...в выучить .Net.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@ivantut9210 ну это же явная подколка что бы холивар устроить (это я так политкорректно слово срач завуалировал) Не надо реагировать.

    • @ivantut9210
      @ivantut9210 2 роки тому

      @@Kulibins1 хорошо, уговорили я точно не буду продолжать))

  • @monoteiz
    @monoteiz 2 роки тому +3

    Дотнет мне казался всегда медленным и прожорливым

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      По сравнению с чем? Всегда был быстрее java, да и всего того что со сборщиками мусора. Медленным он никогда не был. А вот сборщик мусора, особенно если код плохой, уменьшает производительность, но бороться с утечками памяти гораздо легче + в .net много завязано на структуры, кода у нас что-то хранится в стеке и освобождается оно практически бесплатно. Я себе поставил в план сравнить с Rust

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      И да плохой код из любой платформы сделает г... о. Поэтому в первую очередь нужно писать хороший код, а потом уже будет значить платформа. Сколько раз видел всякие повторные не нужные вызовы функций или когда вместо использования специализированных структур dictionary (c#), map (Js) использовали просто массив и делали поиск по нему.