The OpenNET Project / Index page

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

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

07.02.2015 09:30

Спустя почти два года с момента появления прошлой стабильной ветки представлен значительный релиз платформы для выполнения высокопроизводительных сетевых приложений на языке JavaScript - Node.js 0.12. Затягивание разработки ветки 0.12 и излишний контроль над проектом со стороны компании Joyent привёл к расколу в стане разработчиков и основанию форка io.js. Первый выпуск io.js 1.0 во многом идентичен Node.js 0.12 и отличается использованием более свежей версией JavaScript-движка V8 и организационными изменениями, такими как переход к более короткому циклу подготовки релизов и более интенсивному продвижению новшеств. Node.js является более консервативным проектом, в котором приоритетным является обеспечение стабильности кодовой базы.

Наиболее заметные новшества, добавленные в Node.js 0.12:

  • Переход на версию JavaScript-движка V8 3.26, выпущенную в августе 2014 г. (в Node.js 0.10 использовался V8 3.14, выпущенный в 2012 году, а в io.js - V8 3.31.71, выпущенный в конце декабря 2014 г.).
  • Модуль Streams 3 с улучшенной реализацией потоков при сохранении обратной совместимости на уровне API. Из улучшений в Streams можно отметить поддержку механизмов cork и uncork для предотвращения сброса буферов при выполнении операций пакетной записи порции данных. Пакетный режим обеспечивается за счёт логического объединения в очередь передаваемых на запись данных с их последующей единовременной отправкой через системные вызовы write() и writev();
  • В модуле HTTP снято ограничение на число одновременно создаваемых сетевых сокетов (раньше значение maxSockets было равно 5, а теперь не ограничивается и упирается в лимиты, выставленные на стороне операционной системы). Реализована корректная поддержка KeepAlive, что позволяет держать сокеты отрытыми до истечения таймаута или закрытия соединения на другом конце. Добавлена поддержка явного сброса заголовков (flushHeaders), что позволяет исключить передачу дополнительных данных перед отправкой первого байта контента и поддержать проксированные соединения открытыми;
  • В модуле Cluster реализован и задействован новый режим балансировки запросов, работающий с использованием метода кругового перебора (Round Robin) при котором основной сервер принимает соединения и равномерно распределяет их среди обработчиков. Опциональная возможность использования старого метода, при котором приём соединений осуществлялся на стороне обработчиков, сохранена;
  • Модуль TLS переведён на новый механизм TLSWrap, который упрощает обращение из JavaScript к коду TLS на C++. Добавлены новые API для асинхронных callback-вызовов SNI, сшивания OCSP и обработки событий от хранилища;
  • В модуле Buffer задействован механизм более точного выделения памяти для буферов, который позволяет снизить накладные расходы при выделении множества мелких буферов, как с позиции потребления памяти, так и с точки зрения нагрузки на CPU (сборщик мусора выполняется быстрее). Добавлены новые методы, такие как buf.writeUIntLE, Buffer.compare() и buffer.equals(), представлен конструктор "new Buffer(otherBuffer)".
  • В средства управления дочерними процессами (child_process) добавлена поддержка вызовов spawnSync/execSync для запуска дочерних процессов в синхронном режиме (до завершения дочернего процесса работа основного потока будет приостановлена);
  • В модуль Crypto добавлен API для загрузки собственных движков шифрования, для их использования в OpenSSL. Обеспечена возможность шифрования ключей паролем и расширен API для получения паролей. Добавлен API для шифрования по открытым ключам RSA;
  • Модуль VM теперь является надстройкой над модулем Contextify, который используется для обеспечения доступа к данным из sandbox-окружения;
  • Начальная поддержка ECMAScript Internationalization API 1.0 (ECMA-402), которая пока доступна только для английского языка.

Платформа Node.js может быть использована как для серверного сопровождения работы 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 и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. Ни одна функция в Node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.

  1. Главная ссылка к новости (http://blog.nodejs.org/2015/02...)
  2. OpenNews: Выпуск io.js 1.0, форка серверной JavaScript-платформы Node.js
  3. OpenNews: В рамках проекта IO.js началось развитие форка Node.js, независимого от компании Joyent
  4. OpenNews: Выпуск серверной JavaScript-платформы Node.js 0.10
  5. OpenNews: Представлена начальная реализация версии фреймворка node.js для языка C++
  6. OpenNews: Компания Joyent, развивающая Node.js и SmartOS, получила 85 млн долларов инвестиций
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/41625-node.js
Ключевые слова: node.js, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (17) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Efrem (?), 10:53, 07/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Конкуренция - двигатель прогресса
     
     
  • 2.39, Олег (??), 21:50, 07/02/2015 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Конкуренция - двигатель прогресса

    Вообще-то, нет. Двигатель прогресса это opensource и совместная разработка, а конкуренция сама по себе чаще приводит к закрытию кода и к патентам, чем наносит большой вред прогрессу.

     
  • 2.41, Аноним (-), 09:22, 08/02/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Вместо того чтоб делать один хороший node.js теперь будет 2 плохих. Зато конкуренция... Самого с собой...
     
     
  • 3.42, Efrem (?), 20:50, 08/02/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну время покажет насколько они хороши. А так если сравнивать с моделью выпуска релизов например у FF,то на данный момент node.js - это ESR ветка, а io.js - это stable.
     

  • 1.2, Аноним (-), 11:06, 07/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> Ни одна функция в Node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.

    Вообще то там есть есть Sync функции, например, fs.fileReadSync. Но они не рекомендуются, т.к. останавливают основной поток.

     
  • 1.15, Greed (??), 12:42, 07/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Думаю что конкуренция между io.js и node.js пойдет на пользу... Пойду новые плюшки изучать :)
     
  • 1.17, Аноним (-), 13:40, 07/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Совместимость поломали?
     
  • 1.22, manster (ok), 14:35, 07/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ../src/node_crypto.h:42:24: fatal error: openssl/ec.h: No such file or directory
     
     
  • 2.26, casm (ok), 16:28, 07/02/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    у меня нормально собралось, openssl devel проверьте
     
     
  • 3.44, manster (ok), 15:32, 12/02/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > у меня нормально собралось, openssl devel проверьте

    скорее всего нужно "размаскировать" в портаже openssl. Чего не хотелось бы...

     
  • 2.29, Аноним (-), 16:43, 07/02/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ноду нужно брать из NPM. Все остальное от лукавого.
     
     
  • 3.33, Crazy Alex (ok), 17:27, 07/02/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ноду (как и всё остальное) надо брать из репозиториев. Хотя бы неофициальных, если уж совсем припекло.
     

  • 1.35, Ящ (ok), 17:57, 07/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Ненужное ненужно, но хорошо, что оно есть, ибо оттягивает на себя всякий неадекват.
     
     
  • 2.37, Аноним (-), 18:32, 07/02/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Эк вы самокритично то.
     
     
  • 3.38, A.Stahl (ok), 20:30, 07/02/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Что, "то"? Что там такое самокритичное?
     

  • 1.40, Ilya Indigo (ok), 04:22, 08/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    После io.js зашевелились.
     
  • 1.43, Аноним (-), 19:46, 09/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Переход на версию JavaScript-движка V8 3.26, выпущенную в августе 2014 г. (в Node.js 0.10 использовался V8 3.14, выпущенный в 2012 году, а в io.js - V8 3.31.71, выпущенный в конце декабря 2014 г.).

    Слоупоки! В io.js V8 4.1.0.14.

    io.js 1.1.0 (2015-02-03) — V8 4.1.0.14
    io.js 1.0.4 (2015-01-24) — V8 4.1.0.12
    io.js 1.0.3 (2015-01-20) — V8 4.1.0.7
    io.js 1.0.0 (2015-01-14) — V8 3.31.74.1

    3.31.71 ты где откопал — вообще ума не приложу.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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