URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 101429
[ Назад ]

Исходное сообщение
"Выпуск серверной JavaScript-платформы Node.js 0.12"

Отправлено opennews , 07-Фев-15 10:53 
Спустя почти два года с момента появления прошлой стабильной ветки представлен (http://blog.nodejs.org/2015/02/06/node-v0-12-0-stable/) значительный релиз платформы для выполнения высокопроизводительных сетевых приложений на языке JavaScript - Node.js 0.12 (http://nodejs.org/). Затягивание разработки ветки 0.12 и излишний контроль над проектом со стороны  компании Joyent, курирующей разработку Node.js, привёл к расколу в стане разработчиков и основанию форка io.js (http://www.opennet.ru/opennews/art.shtml?num=41452). Первый выпуск io.js 1.0 во многом идентичен Node.js 0.12 и отличается использованием более свежей версией JavaScript-движка V8 и организационными изменениями, такими как переход к более короткому циклу подготовки релизов и более интенсивному продвижению новшеств. Node.js является более консервативным проектом, в котором приоритетным является обеспечение стабильности кодовой базы.


Наиболее заметные новшества (https://github.com/joyent/node/wiki/Api-changes-between-v0.1... добавленные в Node.js 0.12:


-  Переход на версию JavaScript-движка V8 (https://code.google.com/p/v8/) 3.26 (https://github.com/v8/v8-git-mirror/releases/tag/3.28.73), выпущенную в августе 2014 г. (в Node.js 0.10 использовался V8 3.14, выпущенный в 2012 году, а в io.js - V8 3.31.71, выпущенный в конце декабря 2014 г.).
-  Модуль Streams 3 с улучшенной реализацией потоков при сохранении обратной совместимости на уровне API. Из улучшений в Streams можно отметить  поддержку механизмов cork и uncork для предотвращения сброса буферов при  выполнении операций пакетной записи порции данных за счёт логического объединения передаваемых на запись данных и их единовременной отправки через системные вызовы write() и writev().

-  В модуле HTTP снято ограничение на число одновременно создаваемых сетевых сокетов (раньше значение maxSockets было равно 5, а теперь не ограничивается и упирается в лимиты, выставленные на стороне операционной системы). Реализована корректная поддержка KeepAlive, что позволяет  держать сокеты отрытыми до истечения таймаута или закрытия соединения на другом конце. Добавлена поддержка явного сброса заголовков (flushHeaders), чтобы исключить передачу дополнительных данных перед отправкой первого байта контента и поддержать проксированные соединения открытыми;
-  В модуле Cluster реализован и задействован новый режим балансировки запросов, работающий с использованием метода кругового перебора (Round Robin (https://ru.wikipedia.org/wiki/Round-robin_%28%D0&#... при котором основной сервер принимает соединения и равномерно распределяет их среди обработчиков. Поддержка старого метода, при котором приём соединений осуществлялся на стороне обработчиков, сохранена.

-  Модуль TLS переведён на новый механизм TLSWrap, который упрощает использование из JavaScript реализации кода TLS на C++. Добавлены новые API для асинхронных callback-вызовов SNI, сшивания OCSP  и обработки событий от хранилища.
-  В модуле Buffer задействован механизм более точного выделения памяти для буферов, который позволяет снизить накладные расходы при выделении множества мелких буферов, как с позиции потребления памяти, так и с точки зрения нагрузки на CPU (сборщик мусора выполняется быстрее). Добавлены новые методы, такие как buf.writeUIntLE, Buffer.compare() и buffer.equals(), представлен конструктор "new Buffer(otherBuffer)".

-  В средства управления дочерними процессами (child_process) добавлена поддержка вызовов spawnSync/execSync для запуска дочерних процессов в синхронном режиме (до завершения дочернего процесса работа основного потока будет приостановлена);

-  В модуль  Crypto добавлен API для загрузки собственных движков шифрования, для использования в OpenSSL. Обеспечена возможность шифрования ключей паролем и расширен API для получения паролей. Добавлен API для шифрования по открытым ключам RS


-  Модуль VM теперь является надстройкой над модулем Contextify, который позволяет обеспечить  доступ к данным из  sandbox-окружения;


-  Начальная поддержка  ECMAScript Internationalization API 1.0 (ECMA-402 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe... которая пока доступна только для английского языка.


Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей (https://github.com/ry/node/wiki/modules), в которой можно найти модули с  реализацией  серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры.

Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv (https://github.com/joyent/libuv/), которая является надстройкой над libev (http://software.schmorp.de/pkg/libev.html) в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio (http://software.schmorp.de/pkg/libeio.html), для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares (http://c-ares.haxx.se/). Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (http://code.google.com/p/v8/).  


По своей сути Node.js похож на фреймворки Perl AnyEvent (http://search.cpan.org/dist/AnyEvent/), Ruby Event Machine (http://rubyeventmachine.com/), Python Twisted (http://twistedmatrix.com/) и реализацию (http://wiki.tcl.tk/1527) событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. Ни одна функция в Node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.


URL: http://blog.nodejs.org/2015/02/06/node-v0-12-0-stable/
Новость: http://www.opennet.ru/opennews/art.shtml?num=41625


Содержание

Сообщения в этом обсуждении
"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Efrem , 07-Фев-15 10:53 
Конкуренция - двигатель прогресса

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Олег , 07-Фев-15 21:50 
> Конкуренция - двигатель прогресса

Вообще-то, нет. Двигатель прогресса это opensource и совместная разработка, а конкуренция сама по себе чаще приводит к закрытию кода и к патентам, чем наносит большой вред прогрессу.


"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Аноним , 08-Фев-15 09:22 
Вместо того чтоб делать один хороший node.js теперь будет 2 плохих. Зато конкуренция... Самого с собой...

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Efrem , 08-Фев-15 20:50 
Ну время покажет насколько они хороши. А так если сравнивать с моделью выпуска релизов например у FF,то на данный момент node.js - это ESR ветка, а io.js - это stable.

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Аноним , 07-Фев-15 11:06 
>> Ни одна функция в Node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.

Вообще то там есть есть Sync функции, например, fs.fileReadSync. Но они не рекомендуются, т.к. останавливают основной поток.


"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Greed , 07-Фев-15 12:42 
Думаю что конкуренция между io.js и node.js пойдет на пользу... Пойду новые плюшки изучать :)

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Аноним , 07-Фев-15 13:40 
Совместимость поломали?

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено manster , 07-Фев-15 14:35 
../src/node_crypto.h:42:24: fatal error: openssl/ec.h: No such file or directory

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено casm , 07-Фев-15 16:28 
у меня нормально собралось, openssl devel проверьте

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено manster , 12-Фев-15 15:32 
> у меня нормально собралось, openssl devel проверьте

скорее всего нужно "размаскировать" в портаже openssl. Чего не хотелось бы...


"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Аноним , 07-Фев-15 16:43 
Ноду нужно брать из NPM. Все остальное от лукавого.

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Crazy Alex , 07-Фев-15 17:27 
Ноду (как и всё остальное) надо брать из репозиториев. Хотя бы неофициальных, если уж совсем припекло.

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Ящ , 07-Фев-15 17:57 
Ненужное ненужно, но хорошо, что оно есть, ибо оттягивает на себя всякий неадекват.

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Аноним , 07-Фев-15 18:32 
Эк вы самокритично то.

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено A.Stahl , 07-Фев-15 20:30 
Что, "то"? Что там такое самокритичное?

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Ilya Indigo , 08-Фев-15 04:22 
После io.js зашевелились.

"Выпуск серверной JavaScript-платформы Node.js 0.12"
Отправлено Аноним , 09-Фев-15 19:46 
> Переход на версию JavaScript-движка V8 3.26, выпущенную в августе 2014 г. (в Node.js 0.10 использовался V8 3.14, выпущенный в 2012 году, а в io.js - V8 3.31.71, выпущенный в конце декабря 2014 г.).

Слоупоки! В io.js V8 4.1.0.14.

io.js 1.1.0 (2015-02-03) — V8 4.1.0.14
io.js 1.0.4 (2015-01-24) — V8 4.1.0.12
io.js 1.0.3 (2015-01-20) — V8 4.1.0.7
io.js 1.0.0 (2015-01-14) — V8 3.31.74.1

3.31.71 ты где откопал — вообще ума не приложу.