Релиз серверной JavaScript-платформы node.js 0.4
15 февраля 2011 года
Вышел второй стабильный релиз платформы node.js 0.4 (нечетные ветки - экспериментальные, а четные (0.2, 0.4) - стабильные), позволяющей создавать высокопроизводительные сетевые приложение на языке JavaScript. Для обеспечения обработки большого числа параллельных запросов node.js использует для запуска кода асинхронную модель, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. По своей сути node.js похож на фреймворки Ruby Event Machine и Python Twisted, но цикл обработки событий (event loop) в node.js скрыт от разработчика и напоминает обработку событий работающим в браузере web-приложением, при этом функции платформы не ограничены web и поддерживают создание обычных сетевых клиентских и серверных программ.
В качестве способов мультиплексирования соединений поддерживается epoll, kqueue, /dev/poll и select. Для обеспечения выполнения JavaScript-кода используется разработанный компанией Google движок V8. Для мультиплексирования соединений используется библиотека libev, для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe).
Для расширения функциональности приложений на базе node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией HTTP/SMTP/XMPP/DNS/FTP/IMAP/POP3 серверов и клиентов, модули для интеграции с различными web-фреймворков, WebSocket и Ajax обработчики, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (например, OAuth), XML-парсеры.
При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдет к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. Ни одна функция в node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.
Из новшеств node.js 0.4 можно отметить:
- Значительная переработка систем для организации шифрованных каналов связи (TLS/SSL), расширение функциональности и упрощение API. Вместо излишне завязанного на сокеты кода для связи с OpenSSL, теперь для каждого соединения создается два потока - дуплексный шифрованный поток (работает через TCP raw-сокет, используя метод Stream.prototype.pipe()) и дуплексный поток для данных, передаваемых открытым текстом;
- Упрощенный API HTTP-клиента c поддержкой пула соединений;
- Более легковесный код для выделения памяти под буферы (объект Buffer). Для ухода от проблем с медленным выделением памяти и трудностями с уборкой мусора, осуществлен уход от ObjectWrap к обычным javascript-объектам, что положительно сказалось на производительности;
- С целью улучшения поддержки пакетных менеджеров добавлены некоторе изменения в код, связанный с загрузкой модулей. В частности, в NPM добавлена поддержка поиска пакетов в предопределенной директории node_modules/; улучшено распознавание относительных путей в модулях, загруженных при использовании символических ссылок; в require() добавлен простейший разбор параметров package.json, что позволило обеспечить прямую работу с директорией пакета;
- Представлена начальная поддержка сборки для платформы Windows;
- Произведено обновление JavaScript-движка V8 до версии 3.1.2, в которой интегрирована новая инфраструктура компиляции и добавлен GDB-плагин для Linux.
- Добавлен новый встроенный клиент для отладчика V8;
- Добавлен модуль "os", в котором предоставлен набор полезных функций для извлечения информации о системе, например, os.cpus(), os.freemem(), os.totalmem() и os.loadavg().
Источники[править]
- Главная ссылка к новости (http://nodejs.org/v0.4_announc...)
- Почему Google V8 пока не подходит для встраивания в серверы
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.