The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Выпуск серверной JavaScript-платформы Node.js 0.12"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Выпуск серверной JavaScript-платформы Node.js 0.12"  +/
Сообщение от opennews on 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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +5 +/
Сообщение от Efrem email on 07-Фев-15, 10:53 
Конкуренция - двигатель прогресса
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

39. "Выпуск серверной JavaScript-платформы Node.js 0.12"  –4 +/
Сообщение от Олег (??) on 07-Фев-15, 21:50 
> Конкуренция - двигатель прогресса

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

41. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +/
Сообщение от Аноним (??) on 08-Фев-15, 09:22 
Вместо того чтоб делать один хороший node.js теперь будет 2 плохих. Зато конкуренция... Самого с собой...
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

42. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +/
Сообщение от Efrem email on 08-Фев-15, 20:50 
Ну время покажет насколько они хороши. А так если сравнивать с моделью выпуска релизов например у FF,то на данный момент node.js - это ESR ветка, а io.js - это stable.
Ответить | Правка | ^ к родителю #41 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +2 +/
Сообщение от Greed (??) on 07-Фев-15, 12:42 
Думаю что конкуренция между io.js и node.js пойдет на пользу... Пойду новые плюшки изучать :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

17. "Выпуск серверной JavaScript-платформы Node.js 0.12"  –1 +/
Сообщение от Аноним (??) on 07-Фев-15, 13:40 
Совместимость поломали?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

22. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +/
Сообщение от manster (ok) on 07-Фев-15, 14:35 
../src/node_crypto.h:42:24: fatal error: openssl/ec.h: No such file or directory
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

26. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +1 +/
Сообщение от casm (ok) on 07-Фев-15, 16:28 
у меня нормально собралось, openssl devel проверьте
Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

44. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +/
Сообщение от manster (ok) on 12-Фев-15, 15:32 
> у меня нормально собралось, openssl devel проверьте

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

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

29. "Выпуск серверной JavaScript-платформы Node.js 0.12"  –1 +/
Сообщение от Аноним (??) on 07-Фев-15, 16:43 
Ноду нужно брать из NPM. Все остальное от лукавого.
Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

33. "Выпуск серверной JavaScript-платформы Node.js 0.12"  –2 +/
Сообщение от Crazy Alex (ok) on 07-Фев-15, 17:27 
Ноду (как и всё остальное) надо брать из репозиториев. Хотя бы неофициальных, если уж совсем припекло.
Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

35. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +2 +/
Сообщение от Ящ (ok) on 07-Фев-15, 17:57 
Ненужное ненужно, но хорошо, что оно есть, ибо оттягивает на себя всякий неадекват.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

37. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +/
Сообщение от Аноним (??) on 07-Фев-15, 18:32 
Эк вы самокритично то.
Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

38. "Выпуск серверной JavaScript-платформы Node.js 0.12"  –2 +/
Сообщение от A.Stahl (ok) on 07-Фев-15, 20:30 
Что, "то"? Что там такое самокритичное?
Ответить | Правка | ^ к родителю #37 | Наверх | Cообщить модератору

40. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +1 +/
Сообщение от Ilya Indigo (ok) on 08-Фев-15, 04:22 
После io.js зашевелились.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

43. "Выпуск серверной JavaScript-платформы Node.js 0.12"  +1 +/
Сообщение от Аноним (??) on 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 ты где откопал — вообще ума не приложу.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру