Страна: Россия
Город: Йошкар-Ола
Был онлайн: 2016-12-14 11:53
О себе:
 
08-07-2016, 10:53
Elena Egoshina

Насколько хорош Node.js?

Перевод статьи: Nick Steele (Quora.co​m)

Над переводом работали: Nancy Pong. При поддержке ​Omega-R

Возможно покажется, что эта статья как-то посягает на твой язык/фреймворк, но технически это не так.

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

Node - это не лекарство от всех болезней, но это лучший выбор для контейнеров, взаимодействующих с клиентом, в больших SPA и SaaS продуктах. Удели мне 10 минут твоего времени: я постараюсь так подогреть любопытство, чтобы захотелось трезво взглянуть на этот вопрос. Ты в хорошей компании, Node никуда не денется с рынка по ряду очень, очень хороших причин. Позволь мне пролить на них свет...

Любой тест производительности, который когда-либо доказывал обратное, либо был ориентирован на веб-страницы, либо - на большую вычислительную мощность, либо не был написан в соответствии с асинхронной неблокирующей природой Node.

Все эти компании (и многие другие, например Intel, HP и IBM) опубликовали подробные отчеты или посты о том, как они оценили все существующие технологии и перевели на Node свои ведущие или новейшие продукты...

Каждая из компаний отметила минимум 30-процентный рост производительности на том же оборудовании, и даже больший (более 50%) рост производительности разработчиков.

… но …

Node - не быстрое решение для веб-страниц, Node - быстрое решение для SPA (одностраничных приложений) и SaaS (ПО как услуга).

И еще, в случаях, когда требуется большая вычислительная мощность, стоит делегировать обработку другому языку/фреймворку в рабочем потоке/ серверу, использующему Java (чуть быстрее), C++ (гораздо быстрее) или другому более быстрому вычислительному языку/фреймворку.

… с этим разобрались? Хорошо, идем дальше…

Почему Node надерет любой фреймворк…

Node такой быстрый, потому что у всех подсоединенных клиентов один и тот же цикл обработки событий.

Да, да, именно так. Один сервер может обслуживать миллион клиентов, подсоединенных в режиме реального времени, и у всех у них будет один и тот же событийный цикл, в одном и том же процессе и на одном и том же процессоре, а это значит, они все могут обмениваться сообщениями. Что еще важнее, у всех клиентских потоков будет общий оверхед, а блокирующие операции будут передаваться в рабочий поток (который даже может быть на других node-серверах), которые, кстати, Node никогда не блокирует (если, конечно, ты где-то не ошибся).

Проблемы с безопасностью? Никогда не блокирует?! Как впихнуть 900 байтов оверхеда на HTTP-запросы в пропускную способность одного единственного сервера с AJAX-поллингом? Как все эти потоки получат доступ к разным файлам, разным переменным? А как же … куки? Потоки? Вы шутите? Как работает распределение памяти? Баги? Дебаггинг? Сложно! Нужно!

Скажем так, это работает. Можешь зайти на сайт Node, чтобы подробнее узнать, как и почему все это работает, но я сделаю небольшой обзор. Очень ВАЖНО, чтобы это было понятно: ведь именно поэтому Node лучше. И многие люди, использующие Node (даже те, кто считается подлыми экспертами по стекам), даже не понимают, что вообще происходит: Node БЫСТРЕЕ ИМЕННО ПОТОМУ, что использует один поток - это его сила, а не слабость. Он специально создан таким.

Docs | Node.js

Давай рассмотрим разницу между Node и всеми остальными решениями - и поймем, почему те, кто судят просто по количеству запросов в секунду, не улавливают всей сути; они, можно сказать, используют Феррари, чтобы взболтать Мартини...

Как происходит масштабирование (в традиционном смысле): запускаешь больше серверов, каждый сервер за раз выделяет по одному потоку на каждый процесс, а налаживать систему “общения” между всеми элементами приходится самому, и самому сортировать базу данных, и самому разрабатывать систему сообщений и push-уведомлений… да, все самому...

А вот как масштабировать с Node: нифига не делаешь - от слова совсем (как минимум до момента появления массивной нагрузки), а потом просто закидываешь новый сервер в пул рабочих потоков… Доступ к базе данных замедляется? Закинь еще один сервер БД в пул … без разницы, парень. Node справится со всем этим.

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

… Итак, Node-сервер по сути всегда что-то делает. Всегда, если есть, что делать. Просто убедись, что пишешь неблокирующий, событийно-ориентированный код, типа того, что на картинке сверху.

WebSocket; Обновленный HTTP протокол, которому 4 года, который поддерживается всеми браузерами, и с помощью которого (что известно лишь немногим) Node и надирает любой фреймворк…

WebSocket разрабатывался под веб-приложения. Он использует Node. С WebSocket нет никакого 900-байтового оверхеда, как при AJAX-поллинге; вместо этого, каждый клиент подсоединяется и остается на линии - вот и все.

Разве это не связано с большим оверхедом? Нет. Типичное клиентское соединение с сервером Node использует около 20 кб памяти и почти не использует время центрального процессора.

Вопреки распространенному убеждению, соединение WebSocket - это не порт, а просто таблица в памяти, которая содержит данные по соединениям.

Самый популярный WebSocket фреймворк - это SocketIO.

Почему WebSocket так крут? Потому что он делает то, на что не способен HTTP:

  • написать всего в пять строчек кода приложение чат, масштабируемое под миллионы активных пользователей… Socket.IO - Chat
  • проводить дебаггинг клиента в режиме реального времени, даже если клиент находится на другом конце планеты.
  • обеспечить работу фреймворков масштабируемых баз данных, которые скупает Google… Build Extraordinary Apps - Firebase
  • обеспечить работу вашего веб-приложения на десктопе - Windows, Mac или Linux… node-webkit: app runtime based on Chromium and node.js

Кто сказал на десктопе? Я могу запустить свое Node-веб-приложение на десктопе? На любом десктопе?

Да.

Вот лишь несколько из сотен тысяч программ, разработанных с использованием Node WebKit (включая всю платформу Intel XDA).

nwjs/nw.js

Как скомпилировать твое веб-приложение в десктопное?

Заархивируй папку со своим Node-приложением, добавь туда файл манифеста и исполняемый файл (8-16 Мб, в зависимости от операционной системы) - и десктопное приложение готово, у него даже будет инсталлятор и деинсталлятор. Проблема решена.

Node WebKit - это не единственный вариант для десктопа - существует множество других, но не будем на них отвлекаться.

… Чтобы уместить эту невероятную эпичную тему в статью, я закончу небольшим анализом состояния рынка. Рынок рабочих мест по Node растет быстрее, чем по всем остальным фреймворкам вместе взятым. За последний год рост составил более 150,000%. Это происходит потому, что Node быстрее, с ним проще работать и он автоматически масштабирует сам себя. Люди читают статьи евангелистов вроде меня и переписывают свои SPA и SaaS на Node.

Пойдем, сын мой/дочь моя! Давай вместе поклоняться Node… ;)

 
programmatic
development
node js
0 0 0
DustinFuh DustinFuh
06-01-2017, 15:23
Мне нравится эта фраза :) ------ <a href=http://ledpolice.ru>фонарь police</a> | http://ledpolice.ru

Чтобы оставлять комментарии вам необходимо зарегистрироваться