релиз , платформа за изпълнение на мрежови приложения на JavaScript. Node.js 14.0 попада в клоновете с дългосрочна поддръжка, но този статус ще бъде присвоен едва през октомври, след стабилизиране. Поддръжката на Node.js 14.0 ще до април 2023 година. Поддръжката на предишната LTS версия Node.js 12.0 ще продължи до април 2022 година, а на предишната до нея LTS версия 10.0 до април 2021 година. Поддръжката на междинната версия 13.x ще приключи през юни тази година.
Основни :
- Стабилизирана е възможността за генериране в реално време или при настъпването на определени събития , в които се отразяват събития, помагащи за диагностика на проблеми като сривове, падане на производителността, течове на памет, висока натовареност на CPU, неочаквано извеждане на грешки и т.н.
- Добавена е експериментална поддръжка на API с реализация на класа AsyncLocalStorage, който може да се използва за създаване на асинхронно състояние с обработвачи, базирани на callback извиквания и promise. AsyncLocalStorage позволява съхранение на данни по време на обработката на уеб заявка, напомнящо на локалните хранилища (Thread-Local Storage) в други езици.
- Премахнато е извеждането на предупреждение за експерименталната функция при зареждане на включвани и експортирани чрез изразите import и export. В момента самата реализация на модулите ESM остава експериментална.
- Двигателят V8 е обновен до версия (, , ), в която са внесени нови оптимизации на производителността и добавени нововъведения като новата логическа операция за обединение «??» (върща дясния операнд, ако левият операнд е NULL или undefined, и обратно), операторът «?.» за еднократна проверка на цялата верига от свойства или извиквания (например «db?.user?.name?.length» без предварителни проверки), методът Intl.DisplayName за получаване на локализирани имена и т.н.
- Извършена е ревизия на API Streams, насочена към подобряване на съгласуваността на API интерфейсите на Streams и отстраняване на различията в поведението на основните части на Node.js. Например, поведението на http.OutgoingMessage е приближено до stream.Writable, а net.Socket до stream.Duplex. Опцията autoDestroy по подразбиране е зададена на «true», което предполага извикване на «_destroy» след приключване.
- Добавена е експериментална поддръжка на API (), предоставяща интерфейси за директна работа с операционната система (POSIX API за работа с файлове, сокети и т.н.).
- Повишени изисквания към компилатори и платформи: macOS 10.13 (High Sierra), GCC 6, .
Напомняме, че платформата 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
