Node.js не следует сравнивать с Нарвалом, вместо этого его следует сравнить с Rhino. Как и Rhino, Node.js является интерпретатором javascript.
Node.js соответствуют спецификации CommonJS для модулей, поэтому все библиотеки для него совместимы с CommonJS. Похоже, что Нарвал также совместим с CommonJS, что означает, что они будут использоваться в узле.
Но сначала посмотрите на стандартные модули Узел, поскольку там, похоже, много перекрытий с Нарвалом. Кроме того, взгляните на список 3-модулей сторонних доступных для Node.js:
Дополнительный ответ:
Ах, теперь я вижу. Нарвал действительно похож на Узел. Вы сказали, что Нарвал - это основа, которая отбросила меня. Теперь я вижу, что это не так. На самом деле, в вводной странице говорится, что вы можете запускать фреймворки, такие как Nitro, поверх интерпретатора Narwhal.
Разница между Нарвалом и Узлом в основном Нарвал использует подключаемую архитектуру javascript, а Node - только V8. Оба являются собственно «оболочками» javascript (позволяют называть их, что на данный момент, чтобы избежать путаницы с термином «интерпретатор»).
Я не уверен, как можно использовать библиотеки CommonJS, написанные для любой платформы, и использовать их на другой платформе. Я бы предположил, что все чистые JS-библиотеки совместимы друг с другом. Узел использует неблокирующую модель ввода-вывода, поэтому некоторые двоичные модули для Нарвала могут работать неправильно на узле.
Узел действительно программирует стиль обратного вызова (хотя бы для максимального использования неблокирующего ввода-вывода). Для опытного программиста JS это не проблема, так как мы привыкли к setTimeout()
, XMLHttpRequest
и т. Д. На самом деле, как опытный программист JS, я предпочитаю стиль Узел. Нархал чувствует себя слишком много, как C.
Примеры:
Вот что я имею в виду различные «ощущение» Node над Нарвала.
В Нарвала, пример для прихлебывая файла является:
var fs = require("file");
var data = fs.read(myfilename); /* code stops at this point
* until all data is read
*/
/* process data here */
В Node.js это:
var fs = require('fs');
fs.readFile(myfilename, function(err,data) {
/* process data here */
});
/* readFile returns immediately and code continues
* executing while file is being read
*/
Как setTimeout
, чтение файлов в узле является асинхронным (ваша потребность код ждать, пока жесткий диск будет искать и читать данные, в течение которых вы можете запускать другие фрагменты кода).
"...класс приложений, которые не могут быть эффективно написаны с блокировкой ввода-вывода, как игры, которые поддерживают свое состояние в памяти сервера и поддерживают связь с многочисленными клиентами ». это похоже на сильное утверждение - я согласен с тем, что NodeJs, скорее всего, больше подходит для написания таких приложений, но не зашел так далеко, чтобы сказать, что в целом они «не могут быть эффективно написаны» с помощью нитей и блокирования API. – oberhamsi
«Модули ввода и вывода наррала блокируются, как и стандартные библиотеки для Python , Ruby, Tcl ... «Я просто хотел бы, чтобы стандартный ввод/вывод Tcl не был блокирующим (или, точнее, может использоваться не блокирующим образом), и так с 1990-х годов. – slebetman
Соответствующий Помимо этого (старого) вопроса, Нарвал, похоже, стал заброшенным проектом. –