The OpenNET Project / Index page

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

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

31.05.2017 12:13

Представлен релиз Node.js 8.0.0, платформы для выполнения высокопроизводительных сетевых приложений на языке JavaScript. Node.js 8.0 относится к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Время выпуска обновлений для LTS-веток составляет 4 года. Поддержка прошлой LTS-ветки Node.js 6.0 продлится до 2020 года, а позапрошлой LTS-ветки 4.x до апреля 2018 года. Поддержка промежуточной ветки Node.js 7.0 будет прекращена в июле 2017 года.

Из улучшений в Node.js 8.0 отмечается обновление движка V8 до версии 5.8, в которой реализована новая схема компиляции, основанная на применении интерпретатора Ignition и JIT-компилятора Turbofan. Новая схема примечательна повышением производительности выполнения JavaScript-приложений и снижением расхода памяти. В V8 5.8 также представлен новый подход к стабилизации - ABI данной версии будет совместим с V8 5.9 и 6.0, что позволит реализовать обновление движка V8 до новых выпусков в рамках жизненного цикла ветки Node.js 8.x.

Среди других изменений:

  • Новый Node.js API (N-API), предоставляющий средства для создания нативных дополнений к Node.js, не привязанных к JavaScript runtime и рассматриваемых как часть Node.js. Для подобных дополнений будет обеспечен неизменный ABI, позволяющий без перекомпиляции использовать дополнение с разными версиями Node.js и даже с разными JavaScript-движками (V8 и Chakra-Core);
  • Добавлена экспериментальная поддержка асинхронных обработчиков (модуль async_hooks), через которые можно выполнять мониторинг операций в цикле обработки событий, отслеживать асинхронные запросы и полностью контролировать весь жизненный цикл работы приложения;
  • В классе URL обеспечена полная поддержка стандарта WHATWG, определяющего требования к оформлению URL и API для разбора URL, представляемый браузерами;
  • В классе Buffer представлена серия новых методов формирования буфера, таких как Buffer.alloc(), Buffer.allocUnsafe() и Buffer.from(). При вызове устаревшего конструктора Buffer(num) программе теперь выделяется обнулённый блок памяти (ранее память не инициализировалась, что могло привести к утечке остаточных данных). Для выделения памяти без обнуления (заметно снижает производительность) предложен метод Buffer.allocUnsafe(num);
  • Представлен новый API util.promisify(), предоставляющий обвязку над штатным API на основе callback-вызовов для функций, возвращающих Promise;
  • В console.log(), console.error() и других методах модуля console появилась возможность перенаправления вывода в stdout, stderr и неименованные каналы. Ошибки в процессе вывода теперь игнорируются, а для возвращения старого поведения (выход из программы) в конструктор Console добавлена опция ignoreErrors;
  • Добавлена опция "--redirect-warnings={file}" и переменная окружения "NODE_REDIRECT_WARNINGS={file}" при помощи которых можно перенаправить в файл предупреждения, например о вызове устаревших возможностей, раньше выводимые в stderr;
  • В Stream API добавлены новые способы завершения или обрыва потока. Каждый экземпляр объекта теперь включает метод destroy(), реализация которого может быть изменена через создание метода _destroy();
  • Вместо устаревшего CLI-отладчика в состав runtime добавлен инструмент node-inspect. Добавлен экспериментальный JavaScript API для инспектирования работы процессов Node.js с использованием протокола Inspector;
  • В состав включён новый выпуск пакетного менеджера npm 5.0.0.

Напомним, что платформа 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 (дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core).

По своей сути 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. Главная ссылка к новости (https://nodejs.org/en/blog/rel...)
  2. OpenNews: В Chrome тестируют новый подход к компиляции JavaScript
  3. OpenNews: Выпуск серверной JavaScript-платформы Node.js 6.0
  4. OpenNews: В рамках проекта PurpleJS развивается альтернатива Node.js, работающая поверх JVM
  5. OpenNews: Выпуск серверной JavaScript-платформы Node.js 7.0
  6. OpenNews: Представлен TurboFan, новый JIT-компилятор для JavaScript-движка V8
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/46630-node.js
Ключевые слова: node.js, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (17) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 12:30, 31/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Ждем экспертов
     
     
  • 2.2, Эксперт (?), 13:10, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Вспомнити npm left pad!
     
     
  • 3.4, Аноним (-), 13:59, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    leftpad подъезжает в язык
     
  • 3.17, Вы забыли заполнить поле Name (?), 00:32, 01/06/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Он уже в core http://node.green/#ES2017-features-String-padding
     

  • 1.3, Аноним (-), 13:35, 31/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    должен быть http2 в этом релизе. А это значит поддержка сжатия в ссл соединениях
     
  • 1.5, anonimus (?), 15:45, 31/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Новый Node.js API (N-API), предоставляющий средства для создания нативных дополнений к Node.js

    Шо, опять? У них традиция, каждый мажорный выпуск ломать совместимость нативных модулей. Опять все наработки человечества в трубу.

     
     
  • 2.7, KonstantinB (ok), 17:09, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    ничего не сломали, оно параллельно сбоку
     
     
  • 3.11, anonimus (?), 19:47, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сейчас да, она пока еще не стабилизировалась. Но как только станет стабильной, у них не будет препятсвий отломать старое апи.

    + сейчас, возможно, появятся редакции на чакре. Короче, рано или поздно, придется выбросить все свои старые обертки над сишными либами и переписать их под новое апию

     
  • 2.21, Аноним (-), 04:00, 01/06/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Эта охрененная новость на самом деле. Писать биндинги без привязки к V8, без С++, с гарантией стабильного ABI между версиями
     

  • 1.12, Аноним (-), 20:01, 31/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Клеща тем наконец то импорты es2015 запилят?
     
     
  • 2.16, juvvidildo (?), 23:09, 31/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Когда в стандарте будет описана работа импортов
     
  • 2.18, dahl (?), 00:32, 01/06/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    зачем? там уже есть и import (require) и экспорт (module.export)
     
     
  • 3.22, Аноним (-), 04:35, 01/06/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Напрочь отсутствует default-символ, так что модуль, "module.exports-ящий" какие-нибудь функции, экспортит заодно и объект с прототипом Object. Также вводится некросс-"окруженческая" "глобальная" переменная require. Также еще с удивлением можно обнаружить, что require, exports, module и __dirname -- на самом деле не глобальные переменные, а аргументы функции, в которую неявно и обычной конкатенацией оборачивается любой nodejs-ный файл, так что внутри любого nodejs-ного "модуля" доступен arguments, который, на минуточку, не должен быть доступен вне функции.




    sh-4.3$ cat main.js
    console.log(arguments.callee.toString());
    sh-4.3$ node main.js
    function (exports, require, module, __filename, __dirname) {
    console.log(arguments.callee.toString());

    }



     
  • 3.23, ThatAtGuy (?), 22:05, 01/06/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Так описан же уже стандарт? Ещё в 2015 описан.
     

  • 1.20, _Vitaly_ (ok), 02:46, 01/06/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Там пока пятый npm очень бажный. Стоит подождать.
     
     
  • 2.24, ThatAtGuy (?), 22:06, 01/06/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Можно подробнее?
     
     
  • 3.25, _Vitaly_ (ok), 22:17, 01/06/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Можно подробнее?

    Много ошибок при установке зависимостей. В трекер npm уже что-то зарепортили. У меня на большом проекте npm install не отработал. Пока откатился обратно на седьмую ноду.

    С большими релизами всегда так. Через 2-4 недели вычистят.

     

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



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

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