The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск серверной JavaScript-платформы Node.js 0.10"
Отправлено opennews, 12-Мрт-13 00:44 
Вышел (http://blog.nodejs.org/2013/03/11/node-v0-10-0-stable/) стабильный релиз Node.js 0.10 (http://nodejs.org/), платформы для выполнения высокопроизводительных сетевых приложений на языке JavaScript. Платформа может быть использована как для серверного сопровождения работы 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/), но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. Ни одна функция в Node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.


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

-  Новая реализация API для работы с потоками ввода/вывода - Streams2 (http://blog.nodejs.org/2012/12/20/streams2/), устраняющая некоторые ранее проявляющиеся проблемы, такие как невозможность прочитать только фиксированное число байт, оставив остальную часть потока для дальнейшей обработки. Кроме того, новая система позволила перевести все потоки в ядре Node.js на использование единого набора легко расширяемых классов, а также упростила создание потоковых интерфейсов в пользовательских приложениях. Новое API Streams2 также доступно в виде модуля readable-stream (https://npmjs.org/package/readable-stream) для прошлых выпусков Node.js, при этом 37 модулей в репозитории уже используют (https://npmjs.org/browse/depended/readable-stream) данный API;

-  Модуль domain (http://nodejs.org/api/domain.html), позволяющий связать несколько разных операций ввода/вывода и выполнить их обработку в виде единой группы, зафиксирован в плане функциональности и переведён из разряда экспериментальных в категорию нестабильных, а в будущем будет позиционирован как стандартный способ обработки ошибок в Node.js;

-  Проведена большая работа по оптимизации производительности, что отразилось в заметном ускорении выполнении тестов, по сравнению с веткой 0.8. Некоторые тесты, особенно связанные с вводом/выводом и шифрованием, в новой версии выполняются быстрее в разы;

-  Изменен способ обработки функции process.nextTick(), которая теперь не привязана к циклу обработки событий и не зависит от операций ввода/вывода. Новая реализация process.nextTick() отличается  соблюдением точности callback-вызова, вне зависимости от интенсивности ввода/вывода;

-  Переработана работа сборщика мусора, активация которого стала более предсказуемой. Если ранее сборщик мусора пытался планировать запуск чистки с оглядкой на состояние памяти и простой системы, из-за чего было невозможно предсказать, когда он активируется и как долго будет выполняться, особенно на нагруженных системах, то в новой версии логика вызова сборщика мусора ложится целиком на JavaScript-движок V8, который достаточно продвинут в плане самостоятельной организации чистки мусора. В результате, отзывчивость система стала более постоянной и предсказуемой.

Следующим этапом развития  Node.js станет выпуск 0.12, в котором будет сделан акцент на улучшении реализации поддержки HTTP и, возможно, в качестве базовой реализации TLS будет возвращён модуль tlsnappy (https://github.com/indutny/tlsnappy). После этого начнётся подготовка знакового релиза 1.0, который ознаменует собой определённую завершённость базовой функциональности,  стабилизацию API и переход к более жёстким критериям обеспечения обратной совместимости.

URL: http://blog.nodejs.org/2013/03/11/node-v0-10-0-stable/
Новость: http://www.opennet.ru/opennews/art.shtml?num=36366

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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