Node v0.12.0

6 февраля вышла новая версия Node.js v0.12. Это был длительный и трудный процесс, не без потерь для NodeJS, в результате которого от основной ветки отделился io.js, но, тем не менее, список нововведений довольно внушительный. Давайте поглядим.

Streams 3


Как обещают разработчики, реализация потоков теперь работает так, как это и ожидается. Причем самое главное, что старые API, введенные в v0.10, не поменялись.

Добавлен механизм cork/uncork для приложений, которые несколько раз синхронно пишут в поток. .cork() включает буферизацию для всех записей в поток, .uncork() же сбрасывает весь буфер.

HTTP


Параметр maxSockets больше не ограничен 5. По умолчанию он установлен в Infinity. Так что теперь разработчик, или операционная система, могут решать, сколько одновременных соединений может поддерживать приложение.

Также изменено поведение KeepAlive соединений. Теперь они будут оставаться открытыми до тех пор, пока не истечет их время жизни (timeout) или удаленный хоcт не разорвет соединение. Таким образом, перестанут работать запросы для продления времени жизни сокета и библиотеки, использующие эту механику.

Cluster


Добавлен round robin режим работы. Он теперь будет работать по-умолчанию. В этом режиме мастер будет принимать новые соединения и распределять их по worker-процессам.

child_process


Добавлены методы spawnSync/execSync для синхронного порождения дочернего процесса. По-моему очень удобная функция для написания каких-нибудь системных скриптов. Не нужно будет больше городить лапшу из callback'ов

Buffer


Обновлен механизм выделения памяти для буферов, разработчики обещают уменьшение потребляемой памяти и ускорение работы garbage collector'а c буферами.

Crypto


Добавлен метод crypto.setEngine(engine[, flags]), позволяющий использовать свои криптографические алгоритмы.
Добавлены методы для шифрования/де-шифрования публичным и приватными ключами (на данный момент поддерживается только RSA).

crypto.publicEncrypt(public_key, buffer)
crypto.privateDecrypt(private_key, buffer)


Добавлен класс Certificate.

VM


Очень интересный модуль для исполнения кода в песочнице. Тонкости и подробности можно поглядеть в документации.

Из печального. Этот релиз, как и ожидалось, вышел с версией V8 3.28.73. Это значит, что там нет новых фич из ES6 Harmony. Это, кстати, главная причина, по которой ребята из io.js ушли делать свой форк.

Вообще, изменения я описал далеко не все, больше подробностей можно увидеть тут и тут.

Как всегда, скачать новый Node.js можно на официальном сайте.

Спасибо за внимание.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 21

    +3
    Ура, спасибо!
    Я всю неделю ленился про это написать.
    От себя добавлю:
    -появились Typed Arrays, Map, Set, WeakMap
    -добавилась полновесная поддержка символов
    -есть итераторы for..of
    -добавились es6-свойства и методы в Math

    И еще много мелочей.
    Что, впрочем, не компенсирует отсутствие генераторов.
      0
      > Что, впрочем, не компенсирует отсутствие генераторов.
      А в io.js они есть.
      ИМХО node.js R.I.P
      Повторит судьбу OpenOffice.
        +6
        как бы этот айо не крякнул, хипстеры ведь поиграются и успокоятся.
          +1
          node.js R.I.P

          Ну это как сказать. Релиз io.js может подстегнуть развитие node. Но может привести и к его гибели, как вы написали. Но сейчас ещё рано прогнозировать, какой из этих сценариев будет развиваться. Поживём увидим.
        +8
        Сейчас в Node JS всё стабильно. Вот зачем они раскачивают лодку? Креаклам не терпится, понимаешь ли, хотят изменений!
        Пинают в сторону всяких там испорченных свободой Chrome с их поддержкой ES6 и promises.
        У Node свой путь… особенный.
          0
          Честно говоря я не вижу причин не использовать промисы, причем нативные. Было бы очень хорошо, если бы все существующее апи переписали бы на промисы, а старое с коллбэками объявили бы депрекэйтед. Понятное дело что за неделю или год от всего старого кода не избавиться, но если этот процесс не начать, то коллбэки останутся навечно, а это очевидно тупиковый путь.
            +1
            Комментатор выше явно забыл добавить тег sarcasm.
            К промисам я думаю nodejs рано или поздно придет, пока можно пользоваться например bluebird.
              0
              К сожалению, горячей замены Promises/A+ на нативные Promises не получится из-за различий в апи.
              А если использовать их в одной цепочке то возникают проблемы с обработкой ошибок — Promises/A+ требуют вызова .done(), в то время как у нативных такого нет.

              Другими словами, если вы используете bluebird, то придется им пользоваться до конца.
                +1
                Чего, простите, done в Promises/A+? Интересно, а почему у меня нативные все тесты A+ тогда проходят? :)
                  0
                  То что нативные проходят тесты a+, не говорит о том что в обратную сторону тоже сработает.

                  .done есть в вышеупомянутом bluebird, смотреть в секции Error handling
                  Тот же метод есть в других популярных библиотеках, например Q — promise.done

                  По факту он является стандартом, это способ не остаться с пустым экраном при необработанном исключении. Нативные же промисы проектируются так, чтобы обойтись него.
                    +1
                    По факту, стандартом в A+ является только метод then, а остальные уже фантазия разработчиков конкретной реализации. Кстати, io.js сейчас внедряет обработку необработанных исключений. И это грозится стать стандартом, но пока только предложение. А вообще, как по мне, подобные проблемы могут возникнуть только при плохом проектирования системы.
            +2
            использовать более не поддерживаемые libuv и v8 (со всеми прилагающимися старыми багами) — это «стабильно»?
              –1
              На iojs все новое, не компилиться ни один нативный модуль.
                0
                pangyp поставьте.
                  0
                  большая часть уже давно отлично компилится. а те, что не компилятся, точно так же поломаны на ноде 0.12
              +2
              0.12 — мажорная версия?
                +1
                Да, Вы правы. Убрал лишнее слово :)
                  0
                  Зря, все там было правильно в некотором смысле. 0.12 — это первая стабильная версия со времен 0.10 (читай — мажорная). У ноды четные версии стабильны, нечетные — экспериментальные.
                    +1
                    Я стараюсь придерживаться semver, а тут сам допустил ошибку в именовании версии. Так что считаю и замечание, и правку оправданными.
                +1
                Забавные имена функций cork/uncork для включения отключения буферизации :)
                  +1
                  В момент написания коммента — request Does not work with Node v0.12.x

                  Only users with full accounts can post comments. Log in, please.