Релиз серверной JavaScript-платформы node.js 0.4
В качестве способов мультиплексирования соединений поддерживается epoll, kqueue, /dev/poll и select. Для обеспечения выполнения JavaScript-кода используется разработанный компанией Google движок V8. Для мультиплексирования соединений используется библиотека libevent, для создания пула потоков (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://www.opennet.ru/opennews/art.shtml?num=29616
|
0 | Tweet | Нравится |
|