Випуск серверної JavaScript-платформи Node.js 13.0

доступний реліз Node.js 13.0, платформи для виконання мережевих програм на мові JavaScript. Одночасно завершено стабілізацію минулої гілки Node.js 12.x, яка переведена до категорії випусків із тривалим терміном підтримки, оновлення для яких випускаються протягом 4 років. Підтримка минулої LTS-гілки Node.js 10.0 триватиме до квітня 2021 року, а позаминулої LTS-гілки 8.0 до січня 2020 року.

Основні поліпшення:

  • Двигун V8 оновлено до версії 7.8, в якій задіяні нові методи оптимізації продуктивності, покращено деструктуризацію об'єктів, зменшено споживання пам'яті та скорочено час підготовки до виконання WebAssembly;
  • За замовчуванням включена повна підтримка інтернаціоналізації та Unicode на базі бібліотек СІС (International Components for Unicode), що дозволяє розробникам писати код, підтримуючий роботу з різними мовами та локалями. Модуль full-icu тепер встановлений за замовчуванням;
  • Стабілізовано API Workers Threads, дозволяє створювати багатопотокові цикли обробки подій (event loop). Реалізація заснована на модулі worker_threads, що дозволяє запускати JavaScript-код у кілька паралельних потоків. Стабільна підтримка API Workers Threads також бекепортована в LTS-гілка Node.js 12.x;
  • Підвищено вимоги до платформ. Для складання тепер потрібно щонайменше macOS 10.11 (потрібний Xcode 10), AIX 7.2, Ubuntu 16.04, Debian 9, EL 7, Alpine 3.8, Windows 7/2008;
  • Поліпшено підтримку Python 3. За наявності в системі Python 2 і Python 3, як і раніше використовується Python 2, але додано можливість складання за наявності в системі тільки Python 3;
  • Видалено стару реалізацію HTTP-парсера («—http-parser=legacy»). Видалені або переведені в розряд застарілих виклики та властивості FSWatcher.prototype.start(), ChildProcess._channel, метод open() в об'єктах ReadStream та WriteStream, request.connection, response.connection, module.createRequireFromPath();
  • слідом вийшли оновлення 13.0.1, у якому по гарячим слідам усунено кілька помилок. У тому числі вирішена проблема з виведенням у npm 6.12.0 попередження про використання версії, що не підтримується.

Нагадаємо, що платформа Node.js може бути використана як для серверного супроводу роботи Web-додатків, так і для створення звичайних клієнтських та серверних мережних програм. Для розширення функціональності програм для Node.js підготовлена ​​велика колекція модулів, в якій можна знайти модулі з реалізацією серверів та клієнтів HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модулі для інтеграції з різними web-фреймворками, обробники WebSocket та Ajax, конектори до СУБД (MySQL, PostgreSQL, SQLite, Mon ), шаблонізатори, CSS-движки, реалізації криптоалгоритмів та систем авторизації (OAuth), XML-парсери.

Для забезпечення обробки великої кількості паралельних запитів Node.js задіює асинхронну модель запуску коду, що базується на обробці подій у неблокувальному режимі та визначенні callback-обробників. Як способи мультиплексування з'єднань підтримуються такі методи, як epoll, kqueue, /dev/poll і select. Для мультиплексування з'єднань використовується бібліотека libuv, яка є надбудовою над лібів у системах Unix та над IOCP у Windows. Для створення пулу потоків (thread pool) задіяно бібліотеку libeio, для виконання DNS-запитів у неблокувальному режимі інтегровано c-аре. Всі системні виклики, що викликають блокування, виконуються всередині пулу потоків і потім, як і обробники сигналів, передають результат своєї роботи назад через канал неназваний (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) {обробка результату});", при якому керування миттєво перейде до подальшого коду, а результат запиту буде оброблений у міру надходження даних. .

Джерело: opennet.ru

Додати коментар або відгук