Релиз серверной JavaScript-платформы node.js 0.6
7 ноября 2011 года
Представлен третий стабильный релиз платформы node.js 0.6 (нечётные ветки - экспериментальные, а чётные (0.2, 0.4, 0.6) - стабильные), предназначенной для обособленного выполнения высокопроизводительных сетевых приложений на языке JavaScript. Функции платформы не ограничены созданием серверных скриптов для Web, платформа может использоваться и для создания обычных клиентских и серверных сетевых программ. Для обеспечения выполнения JavaScript-кода используется разработанный компанией Google движок V8.
Для обеспечения обработки большого числа параллельных запросов node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживается epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libev, для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe).
По своей сути 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 подготовлена большая коллекция модулей, в которой можно найти модули с реализацией HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 серверов и клиентов, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (например, OAuth), XML-парсеры.
Ключевые новшества node.js 0.6:
- Поддержка платформы Windows с задействованием API I/O Completion Ports для обеспечения высокопроизводительной асинхронной обработки большого числа одновременных сетевых соединений. Ранее доступный порт, работающий через систему Cygwin, больше не поддерживается. Портирование для Windows было не простой задачей и потребовало переработки большой части архитектуры ядра node.js, что положительно сказалось на производительности, в том числе и при работе на Unix-системах;
- По сравнению с версией 0.4.12 в 0.6.0 увеличилась производительность операций чтения (io.js read), уменьшилось время запуска и возросла скорость выполнения некоторых других операций. Например, на платформе Linux тестовый скрипт http_simple.js способен выполнить 6263 запросов в секунду (в прошлой версии 5461 запросов в секунду). Пропускная способность операции io.js read возросла с 19.75 mB/s до 26.63 mB/s, а скорость запуска startup.js уменьшилась с 74.7 ms до 49.6 ms. Пропускная способность операций записи (io.js write) немного уменьшилась - с 21.60 mB/s до 17.40 mB/s;
- Интегрированы средства балансировки нагрузки с её распределением на несколько процессов. Для более полного задействования возможностей многоядерных CPU поддерживается запуск кластера из отдельных процессов node.js;
- Улучшена поддержка IPC-вызовов между несколькими экземплярами node.js, созданными при выполнении вызова fork;
- Расширены возможности работающего в режиме командной строки клиента для работы со встроенным в V8 отладчиком;
- Встроен модуль для обеспечения сжатия с использованием библиотеки zlib;
- Незначительное изменение API. Например, удалены http.Agent.appendMessage(), http.getAgent(), net.Server.listenFD(), process.ENV, process.ARGV, process.binding('stdio') и т.д.
Добавлены: child_process.fork(), crypto.createDiffieHellman(), crypto.pbkdf2(), crypto.randomBytes(), fs.utimes()/utimesSync(), fs.futimes()/futimesSync(), http.ClientRequest.setTimeout()/setNoDelay()/setSocketKeepAlive(), net.connect(), os.arch(), os.platform(), os.uptime(), os.networkInterfaces() и т.д.
- JavaScript-движок V8 обновлён с версии 3.1 до 3.6. Из наиболее заметный изменений: RegExp больше не является функцией, поэтому необходимо выполнять RegExp.exec(); строковые даты (например Date('2011-06-06 00:00:00')) теперь привязываются в GMT, а не к локальному часовому поясу (нужно указывать Date('2011-06-06 00:00:00 +09:00')).
В настоящее время ведётся работа по сокращению цикла подготовки релизов node.js. Следующий стабильный выпуск 0.8 запланирован на январь. В дальнейшем разработчики намерены синхронизировать процесс разработки с браузером Chrome и движком V8, перейдя к выпуску новых версий каждые 6 недель.
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.