В Node.js или придерживаться C#.net

Мы собираемся начать создание веб-приложения, которое будет использоваться сотрудниками на наших объектах. Сфера применения довольно проста.

  • принять пользовательский ввод
  • извлекать данные из БД на основе пользовательского ввода
  • извлекать данные из веб-сервисов
  • отображать указанные данные, чтобы пользователь мог просматривать и/или изменять их
  • сохранить изменения в базе данных

В настоящее время мне наиболее удобно работать с C#. Я считаю, что могу работать на любом языке программирования, но сейчас по умолчанию я использую C#. Сказав это, я не тот, кто будет создавать это приложение. Я создал приложение C# для Windows, чтобы сгладить доказательство концепции, но мой товарищ по команде создаст производственное веб-приложение. Сначала он предложил построить это с помощью Javascript, языка, который ему наиболее удобен. Поэтому я напомнил ему, что нам нужно взаимодействовать с базой данных, и отверг его идею подключения к БД с помощью JS.

https://stackoverflow.com/questions/857670/how-to-connect-to-sql-server-database-from-javascript-in-the-browser

Тогда он сказал... well then, how about I make it using Node.js?. Поэтому я начал изучать Node.js, чтобы понять, почему я должен принять или почему я должен отказаться от этой идеи. Откровенно говоря, я не понимаю, почему я позволил бы ему создать это приложение, используя Node.JS вместо C#. Он еще не умеет писать на C#, но и на Node.JS тоже не умеет. Его кривая обучения будет одинаковой в любом случае...

Моя настоящая дилемма заключается в следующем... Зачем использовать Node.JS, если я знаю, что могу сделать это без него?

Ответы (1)

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

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

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

Всем, кто разбирается в асинхронном вводе-выводе, можно порекомендовать Node, потому что он работает очень хорошо. Но не думайте, что это легко только потому, что это JavaScript. Это не. Это сложно, но очень приятно видеть, что 10 000 одновременных подключений обрабатываются без проблем даже с таким простым кодом (по какой-то причине этот ответ был отклонен, но я уверяю вас, что весь код и данные верны).