релиз , платформа за изпълнение на мрежови приложения на JavaScript. Завършена е стабилизацията на предходната версия Node.js 12.x, която е преместена в категорията на изданията с дългосрочна подкрепа, за която актуализации се публикуват в продължение на 4 години. Подкрепата за предишната LTS версия Node.js 10.0 ще продължи до април 2021 година, а за версията 8.0 до януари 2020 година.
Основни :
- Двигателят V8 е обновен до версия , в която са внедрени нови методи за оптимизиране на производителността, подобрена е деструктуризацията на обекти, намалено е потреблението на памет и е съкратено времето за подготовка на WebAssembly;
- По подразбиране е включена пълна поддръжка на интернационализация и Unicode на базата на библиотеки (International Components for Unicode), което позволява на разработчиците да пишат код, работа с различни езици и локали. Модулът full-icu сега е инсталиран по подразбиране;
- Стабилизиран е API , създаване на многопоточни цикли за обработка на събития (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, MongoDB), шаблонизатори, CSS движки, реализации на криптоалгоритми и системи за авторизация (OAuth), XML парсери.
За осигуряване на обработка на голям брой паралелни заявки Node.js използва асинхронен модел на изпълнение на кода, основан на обработка на събития в не блокиращ режим и определяне на callback обработчици. Като методи за мултиплексиране на връзки се поддържат такива методи като epoll, kqueue, /dev/poll и select. За мултиплексиране на връзки се използва библиотека , която е надстройка над в Unix системи и над IOCP в Windows. За създаване на пул от потоци (thread pool) се използва библиотека , за извършване на DNS заявки в не блокиращ режим е интегрирано . Всички системни извиквания, които водят до блокиране, се извършват вътре в пула от потоци и след това, подобно на обработчиците на сигнали, предават резултата от работата си обратно чрез неназован канал (pipe). Изпълнението на JavaScript код се осигурява чрез използването на разработения от Google двигател (допълнително Microsoft развива вариант на Node.js с двигателя Chakra-Core).
По същността си Node.js е подобен на фреймворките , , и Събития в Tcl, но цикълът за обработка на събития (event loop) в Node.js е скрит от разработчика и наподобява обработката на събития в уеб приложение, работещо в браузър. При написването на приложения за node.js е необходимо да се вземат предвид спецификите на събитийно-ориентираното програмиране; например, вместо да изпълните «var result = db.query(«select..»);» с изчакване на завършването и последващата обработка на резултатите, в Node.js се използва принципа на асинхронно изпълнение, т.е. кодът се трансформира в «db.query(«select..», function (result) {обработка на резултата});», при който управлението бързо ще премине към по-нататъшния код, а резултатът от заявката ще бъде обработен при постъпване на данните.
Източник: opennet.ru
