Новости IT, хостинга
Новость от 12.03.2013

Адрес в интернете:
https://news.hostdb.ru/index/show/id/7798

Выпуск серверной JavaScript-платформы Node.js 0.10


Вышел стабильный релиз Node.js 0.10, платформы для выполнения высокопроизводительных сетевых приложений на языке JavaScript. Платформа может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов 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, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8.

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

Наиболее заметные новшества, добавленные в Node.js 0.10:
Новая реализация API для работы с потоками ввода/вывода - Streams2, устраняющая некоторые ранее проявляющиеся проблемы, такие как невозможность прочитать только фиксированное число байт, оставив остальную часть потока для дальнейшей обработки. Кроме того, новая система позволила перевести все потоки в ядре Node.js на использование единого набора легко расширяемых классов, а также упростила создание потоковых интерфейсов в пользовательских приложениях. Новое API Streams2 также доступно в виде модуля readable-stream для прошлых выпусков Node.js, при этом 37 модулей в репозитории уже используют данный API;
Модуль domain, позволяющий связать несколько разных операций ввода/вывода и выполнить их обработку в виде единой группы, зафиксирован в плане функциональности и переведён из разряда экспериментальных в категорию нестабильных, а в будущем будет позиционирован как стандартный способ обработки ошибок в Node.js;
Проведена большая работа по оптимизации производительности, что отразилось в заметном ускорении выполнении тестов, по сравнению с веткой 0.8. Некоторые тесты, особенно связанные с вводом/выводом и шифрованием, в новой версии выполняются быстрее в разы;
Изменен способ обработки функции process.nextTick(), которая теперь не привязана к циклу обработки событий и не зависит от операций ввода/вывода. Новая реализация process.nextTick() отличается соблюдением точности callback-вызова, вне зависимости от интенсивности ввода/вывода;
Переработана работа сборщика мусора, активация которого стала более предсказуемой. Если ранее сборщик мусора пытался планировать запуск чистки с оглядкой на состояние памяти и простой системы, из-за чего было невозможно предсказать, когда он активируется и как долго будет выполняться, особенно на нагруженных системах, то в новой версии логика вызова сборщика мусора ложится целиком на JavaScript-движок V8, который достаточно продвинут в плане самостоятельной организации чистки мусора. В результате, отзывчивость система стала более постоянной и предсказуемой.

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


Распечатано с HostDB.ru.