Вопрос: Как решить, когда использовать Node.js?


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

Из всех домашних заданий, которые я делал в последние несколько дней, я получил следующую информацию. Node.js

  • это инструмент командной строки, который может запускаться как обычный веб-сервер и позволяет запускать программы JavaScript
  • использует великую Двигатель V8 JavaScript
  • очень хорошо, когда вам нужно делать несколько вещей одновременно
  • основано на событиях, поэтому все замечательные Ajax -подобный материал может быть сделан на стороне сервера
  • позволяет нам совместно использовать код между браузером и бэкэнд
  • позволяет нам разговаривать с MySQL

Некоторые из источников, с которыми я столкнулся, - это:

Учитывая, что Node.js можно запускать почти из коробки Amazon's EC2 экземпляров, я пытаюсь понять, какие проблемы требуют Node.js, в отличие от любого из могущественных королей, таких как PHP , питон а также Рубин , Я понимаю, что это действительно зависит от опыта, который есть на языке, но мой вопрос больше относится к общей категории: когда использовать конкретную структуру и какие проблемы она особенно подходит?


2200


источник


Ответы:


Вы отлично справились с обобщением того, что удивительно в Node.js. Я чувствую, что Node.js особенно подходит для приложений, в которых вы хотите поддерживать постоянное соединение с браузером на сервере. Используя метод, известный как «Долго-опрос» , вы можете написать приложение, которое отправляет обновления пользователю в режиме реального времени. Делая долгий опрос на многих гигантах Интернета, например Рубин на рельсах или Джанго , создаст огромную нагрузку на сервер, поскольку каждый активный клиент использует один серверный процесс. Эта ситуация сводится к битумная яма атака. Когда вы используете что-то вроде Node.js, сервер не нуждается в обслуживании отдельных потоков для каждого открытого соединения.

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

Стоит отметить, что у Ruby и Python есть инструменты для такого рода вещей ( eventmachine а также скрученный , соответственно), но Node.js делает это исключительно хорошо и с нуля. JavaScript исключительно хорошо подходит для модели параллелизма, основанной на обратном вызове, и здесь он преуспевает. Кроме того, возможность сериализации и десериализации с JSON, родным как для клиента, так и для сервера, довольно изящна.

Я с нетерпением жду возможности прочитать другие ответы здесь, это фантастический вопрос.

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

Вот статья о пирамиде и длительном опросе, которая, как оказалось, очень легко настраивается с небольшой помощью от gevent: TicTacToe и длинный опрос с пирамидой ,


1359



Я считаю, что Node.js лучше всего подходит для приложений реального времени: онлайн-игры, инструменты для совместной работы, чаты или что-нибудь, где тот же пользователь (или робот? Или датчик?) С приложением должен быть замечен другими пользователями немедленно, без обновления страницы.

Следует также упомянуть, что Socket.IO в сочетании с Node.js уменьшит вашу задержку в реальном времени даже дальше, чем то, что возможно при длительном опросе. Socket.IO вернется к длинному опросу как к худшему сценарию, а вместо этого использует веб-сокеты или даже Flash, если они доступны.

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

Кроме того, Райан Дал сказал в разговоре, что однажды я присутствовал, что тесты Node.js тесно конкурируют с Nginx за обычные старые HTTP-запросы. Поэтому, если мы будем строить с помощью Node.js, мы сможем эффективно обслуживать наши обычные ресурсы, и когда нам понадобятся события, управляемые событиями, он будет готов обработать его.

Плюс это все JavaScript все время. Лингва Франка на весь стек.


410



Причины использования NodeJS:

  • Он запускает Javascript, поэтому вы можете использовать тот же язык на сервере и клиенте, и даже совместно использовать некоторый код между ними (например, для проверки формы или для визуализации представлений с обоих концов).

  • однопоточных управляемая событиями система быстро даже при обработке множества запросов одновременно, а также простой, по сравнению с традиционными многопоточными Ява или ROR.

  • Постоянно растущий пул пакеты доступный через NPM , включая клиентские и серверные библиотеки / модули, а также средства командной строки для веб-разработки. Большинство из них удобно размещаются на github, где иногда вы можете сообщить о проблеме и найти ее исправленной в течение нескольких часов! Приятно иметь все под одной крышей, с стандартизированной отчетностью о проблемах и простотой разветвления.

  • Он стал стандартной средой дефакто, в которой можно запускать Инструменты, связанные с Javascript и другие веб-инструменты , включая задачи бегунов, minifiers, beautifiers, линтеры, препроцессоры, связки и аналитические процессоры.

  • Это кажется вполне подходящим для прототипирования, гибкого развития и быстрая итерация продукта ,

Причины не использовать NodeJS:

  • Он запускает Javascript, который не имеет проверки типа компиляции. Для больших, сложных безопасность критичных систем или проектов, включая сотрудничество между различными организациями, язык, который поощряет договорные интерфейсы и обеспечивает проверка статического типа может сэкономить время отладки (и взрывы ) в долгосрочной перспективе. (Хотя JVM застрял с null, поэтому, пожалуйста, используйте Haskell для ваших ядерных реакторов.)

  • К тому же многие пакеты в NPM немного сырье , и все еще находится в стадии быстрого развития. Некоторые библиотеки для старых фреймворков прошли десятилетие тестирования и исправления ошибок и очень стабильный к настоящему времени. Npmjs.org не имеет механизма для оценки пакетов , что привело к распространению пакетов, делающих более или менее одно и то же, из которых большой процент больше не поддерживается.

  • Вложенный обратный ад. (Конечно, есть 20 различных решений к этому...)

  • Постоянно растущий пул пакетов может создать один проект NodeJS радикально отличается от следующего. Существует большое разнообразие в реализации из-за огромного количества доступных опций (например, Express / Sails.js / метеор / дерби ). Иногда это может затруднить новый разработчик в проекте Node. Сравните это с Рельсы разработчик присоединяется к существующему проекту: он должен быть в состоянии хорошо ознакомиться с приложением, потому что всем приложениям Rails рекомендуется использовать аналогичная структура ,

  • Работа с файлами может быть немного болью. Вещи, которые тривиальны в других языках, например, чтение строки из текстового файла, достаточно странно сделать с Node.js что есть вопрос StackOverflow об этом с 80 + upvotes. Там в нет простого способа чтения одной записи за один раз из файла CSV , И т.п.

Я люблю NodeJS, это быстро и дико и весело, но я обеспокоен тем, что он мало интересуется доказуемо-корректностью. Будем надеяться, что мы сможем в конечном итоге объединить лучшее из обоих миров. Я очень хочу посмотреть, что заменит узел в будущем ... :)


209



Чтобы сделать это коротко:

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

Хорошая статья о цикле событий в Node.js Технический блог Mixu: Понимание цикла событий node.js ,


208



У меня есть один реальный пример, где я использовал Node.js. Компания, в которой я работаю, получила одного клиента, который хотел иметь простой статический HTML-сайт. Этот сайт предназначен для продажи одного элемента с использованием PayPal и клиент также хотел иметь счетчик, который показывает количество проданных предметов. Ожидается, что клиент посетит этот сайт с огромным количеством посетителей. Я решил сделать счетчик, используя Node.js, и Express.js фреймворк.

Приложение Node.js было простым. Получить сумму проданных предметов из Redis базы данных, увеличивайте счетчик, когда товар продается, и обслуживайте значение счетчика для пользователей через API ,

Некоторые причины, по которым я решил использовать Node.js в этом случае

  1. Он очень легкий и быстрый. За три недели на этом веб-сайте было более 200 000 посещений, и минимальные серверные ресурсы смогли справиться со всем этим.
  2. Счетчик действительно легко сделать, чтобы быть в режиме реального времени.
  3. Node.js прост в настройке.
  4. Существует множество модулей, доступных бесплатно. Например, я нашел модуль Node.js для PayPal.

В этом случае Node.js был потрясающим выбором.


127



The most important reasons to start your next project using Node ...

  • All the coolest dudes are into it ... so it must be fun.
  • You can hangout at the cooler and have lots of Node adventures to brag about.
  • You're a penny pincher when it comes to cloud hosting costs.
  • Been there done that with Rails
  • You hate IIS deployments
  • Your old IT job is getting rather dull and you wish you were in a shiny new Start Up.

What to expect ...

  • You'll feel safe and secure with Express without all the server bloatware you never needed.
  • Runs like a rocket and scales well.
  • You dream it. You installed it. The node package repo npmjs.org is the largest ecosystem of open source libraries in the world.
  • Your brain will get time warped in the land of nested callbacks ...
  • ... until you learn to keep your Promises.
  • Sequelize and Passport are your new API friends.
  • Debugging mostly async code will get umm ... interesting .
  • Time for all Noders to master Typescript.

Who uses it?

  • PayPal, Netflix, Walmart, LinkedIn, Groupon, Uber, GoDaddy, Dow Jones
  • Here's why they switched to Node.

105



There is nothing like Silver Bullet. Everything comes with some cost associated with it. It is like if you eat oily food, you will compromise your health and healthy food does not come with spices like oily food. It is individual choice whether they want health or spices as in their food. Same way Node.js consider to be used in specific scenario. If your app does not fit into that scenario you should not consider it for your app development. I am just putting my thought on the same:

When to use Node.JS

  1. If your server side code requires very few cpu cycles. In other world you are doing non blocking operation and does not have heavy algorithm/Job which consumes lots of CPU cycles.
  2. If you are from Javascript back ground and comfortable in writing Single Threaded code just like client side JS.

When NOT to use Node.JS

  1. Your server request is dependent on heavy CPU consuming algorithm/Job.

Scalability Consideration with Node.JS

  1. Node.JS itself does not utilize all core of underlying system and it is single threaded by default, you have to write logic by your own to utilize multi core processor and make it multi threaded.

Node.JS Alternatives

There are other option to use in place of Node.JS however Vert.x seems to be pretty promising and has lots of additional features like polygot and better scalability considerations.


60



Another great thing that I think no one has mentioned about Node.js is the amazing community, the package management system (npm) and the amount of modules that exist that you can include by simply including them in your package.json file.


41