Node.js: JavaScript ты ли это?
Чуть более недели назад на хабре появилась статья, в которой затрагивалась «проблема»: Node.js — это JavaScript или нет. Некоторые аргументы, представленные в статье были справедливыми, но, увы, безосновательны. Другие же аргументы были вовсе абсурдными и не правдивыми. Я не буду писать о знаниях автора статьи в данной области, даже не буду давать ссылки на это статью (дабы статья перенесена в черновики, она осталась только в архивах). Я же просто сравню скрипты Node.js и JavaScript в таком виде, в котором все его привыкли видеть.
Введение
Для начала обратимся к Википедии и узнаем, что есть такое Node.js и JavaScript:
Node или Node.js — серверная реализация языка программирования JavaScript, основанная на движке V8. Предназначена для создания масштабируемых распределённых сетевых приложений, таких как веб-сервер. Node.js по целям использования сходен с каркасами Twisted на языке Python и EventMachine на Ruby. В отличие от большинства программ JavaScript, этот каркас исполняется не в браузере клиента, а на стороне сервера.
JavaScript — прототипно-ориентированный сценарный язык программирования. Является диалектом языка ECMAScript.
Что ж, определение Node.js немного расплывчато, и надо сказать, не корректно. Тогда посмотрим на информацию на официальном сайте:
Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Самое главное слово здесь — платформа. Оно и характеризует весь Node.js. Из всего вышесказанного можно сделать предварительный вывод, что Node.js это среда выполнения JavaScript, точно как браузер, с той лишь разницей, что у нас нет доступа к DOM (а собственно, зачем он нужен на стороне сервера?; однако существует библиотека для работы с DOM — jsdom).
А причем тут Google?
А действительно, причем? Да, Node.js основан на V8 от Google, но на этом все. Слышать что Google как-то причастен к разработке Node.js — это все равно, что сказать в США «Россия» и услышать стереотипные «медведь», «балалайка» и «водка». Разработку изначально ведут авторы проекта (единственное нужно отметить, что главный автор ушел из проекта, чтобы заняться новыми идеями). Спонсирование ведет совсем непохожая на Google компания Joyent.
Они такие разные.
Давайте же сравним какой-нибудь код, выполнив его в Node.js и браузере, например Chrome. Я, конечно, не стану проверять тривиальный console.log(«Hello, World!»);, возьму что-то посложнее. Например, функцию вычисления факториала с использованием хвостовой рекурсии:
var factorial = function (n, a) < return n < 2 ? a : factorial(n - 1, a * n); >; console.log(factorial(10, 1));
Выполнив данный код в Node.js и Chrome мы получаем одинаковые результаты:
Но этот маленький пример не показывает одну из фишек JavaScript. Тогда давайте посмотрим код, используя ее — Прототипное ООП, думаю он будет понятен без лишнего объяснения:
var Celsius2Fahrenheit = function (val, unit) < this.val = val; this.unit = unit; >; Celsius2Fahrenheit.prototype.setVal = function (degrees) < var degreesArray = degrees.split(" "); this.val = degreesArray[0]; this.unit = degreesArray[1]; >; Celsius2Fahrenheit.prototype.convert = function (to) < if (this.unit != to) < this.unit = to; switch (to) < case "C": < this.val = Math.round((this.val - 32) * 5 / 9); >break; case "F": < this.val = Math.round(this.val * 9 / 5 + 32); >break; > > >; var c2f = new Celsius2Fahrenheit(30, "C"); console.log(c2f.val + c2f.unit); c2f.convert("F"); console.log(c2f.val + c2f.unit); c2f.setVal("100 F"); console.log(c2f.val + c2f.unit); c2f.convert("C"); console.log(c2f.val + c2f.unit);
Код может и не совсем «элегантен», однако результат очень похож на правильный. Проверьте сами, в браузере и в Node.js он одинаков:
30C
86F
100F
38C
Так в чем же отличие? Ну, начнем с того, что для Node.js написано немало встроенных библиотек, или правильней сказать модулей (а соответственно появилась инструкция для их подключения — require). Стоит еще отметить, что в Node.js часто пользуются callback функциями, в отличие от привычного JavaScript. И если смотреть поверхностно, то это все. Чтобы найти еще какие-либо отличая — нужно копать глубже.
Сегодня JavaScript, завтра Node.js
Несомненно, Node.js и JavaScript отличаются. Хотя сравнивать платформу и язык как то странно, но опять же оговорюсь, под JavaScript я подразумеваю скрипт, выполняемый на стороне клиента, а Node.js на сервере.
Так если это две разные стороны одной монеты, то и перейти с одной на другую сложно? Как я писал в комментариях к вышеупомянутой статье: «Не важно, куда ты крутишь руль, ты все равно поворачиваешь». Что значит: не важно, на какой стороне выполняется скрипт, JavaScript остается JavaScript’ом. Этим то и привлек меня Node,js: не надо писать на двух разных языках серверную и клиентскую часть, а если нужно использовать одинаковый код, то достаточно просто воспользоваться старым добрым Ctrl-C Ctrl-V. Не буду говорить за других, но я быстро перешел с написания серверной стороны на PHP к Node.js, и никаких трудностей не заметил.
Мы хотим стабильности!
Про стабильность приложений можно разговаривать вечность. Никто не может гарантировать вам стабильную работу, всегда будет иметь фактор случайности. И Node.js не исключение, как и Chrome, и Windows… Однако достаточно часто обновляется (минимум раз в две недели), что само собой обозначает достаточно надежную работу приложения. Так что на это грех жаловаться…
Послесловие
Конечно, данным текстом я выразил свое видение «проблемы» и никого не хотел обидеть. Я уверен, найдутся те, кто скажет, что различий гораздо больше, но я их пока не заметил. Если вы считаете что я где-то не прав или что-то не дописал, я открыт для конструктивного разговора в комментариях.
Node.js Server-Side JavaScript — что это в диспетчере задач?
Node.js Server-Side JavaScript — компонент взаимодействия программ, может использоваться например в ПО Adobe для работы модулей/плагинов.
Простыми словами: так просто не ответить что это, почему? Node.js это библиотека, которая позволяет использовать возможности языка JavaScript на компьютере. При помощи этой библиотеке функционируют разные модули/плагины в разных программах. То есть у вас на ПК Node.js Server-Side JavaScript может быть например от Фотошопа или от другой программы.
Разбираемся
- Если очень образно говоря, то Node.js это компонент, позволяющий использовать приложения на компьютере, который были написаны на языке JavaScript, который в принципе создан не для ПК, а для веб-приложений. На JavaScript пишут код (функции) для веб-сайтов, но не для компьютеров. А вот чтобы использовать на ПК возможности JavaScript — был придуман компонент Node.js. Но суть не в этом.
- Node.js Server-Side JavaScript может появиться после установки популярного софта, например от Адобе. Этот процесс позволяет обмениваться данными между программами (ПО Адобе содержит множество дочерних модулей). Также Node.js может использоваться для написания плагинов/дополнений.
- Также этот компонент может устанавливать соединение с интернетом. Зачем? Непонятно. Но важно понимать, что компонент может требоваться для работы некоторых модулей ПО, среди которых могут быть и модули проверки лицензии. Поэтому если заблокировать доступ в интернет — могут быть проблемы из-за невозможности проверить лицензию. Еще вместо лицензии может проверять наличие новой версии ПО.
Нашел комментарий как избавиться от процесса, однако предупреждаю — если будете делать, то только на свой страх и риск:
Что можно еще попробовать сделать? Можно попробовать радикально запретить работу процесса:
- Найдите Node.js Server-Side JavaScript в диспетчере задач.
- Нажмите правой кнопкой и выберите пункт Открыть расположение.
- Откроется папка с выделенным файлом. Процесс в диспетчере завершаем.
- Переименовываем файл, можно просто добавить символ нижнего пробела _. Если при переименовании будет ошибка — попробуйте утилиту Unlocker (умеет переименовывать/удалять заблокированные папки/файлы).
Однако этот способ может привести к ошибкам ПО, где используется компонент. Node.js может использоваться не только софтом Адобе, но и другим.
Но в целом, если в диспетчере такая картина:
И при этом доступ в интернет для Node.js Server-Side JavaScript не заблокирован — это НЕнормальное явление. Если у вас ПО лицензированное — нужно написать в техподдержку. Если качали ПО с торрентов, то такое ПО спокойно может быть глючным. Лучше конечно переустановить, скачав с официального сайта.
Надеюсь данная информация оказалась полезной. Удачи и добра, до новых встреч друзья!