Objavljena je Node.js 23.0.0, platforma za pokretanje mrežnih aplikacija u JavaScript-u. Node.js 23.0 je klasifikovan kao srednja grana, koja će biti podržana 7 mjeseci (do juna 2025.). U narednim danima će biti završena stabilizacija grane Node.js 22, koja će dobiti LTS status 29. oktobra i biće podržana do aprila 2027. godine. Podrška za prethodne LTS grane Node.js 20.x i 18.x nastavit će se do aprila 2026. i 2025. godine.
Glavna poboljšanja:
- Dodata eksperimentalna podrška za TypeScript, koja omogućava eksplicitne definicije tipova. Podrška je omogućena pomoću opcija "--experimental-strip-types" i "--experimental-transform-types". U slučaju prve opcije, rad sa TypeScript-om se svodi na brisanje definicija tipova specifičnih za jezik (provera tipa se ne vrši, kod se jednostavno konvertuje u JavaScript bez tipa). Druga opcija pretvara neke elemente TypeScript sintakse, kao što su enumovi i prostori imena, u JavaScript kod.
- Podrazumevano je omogućena mogućnost korišćenja poziva „require()“ za učitavanje JavaScript ESM modula (ECMAScript modula) u sinhronom režimu. ESM moduli se koriste u pretraživačima i zamjenjuju CommonJS module specifične za Node.js. Za učitavanje putem "require()" u Node.js, ESM modul mora biti izvršen sinhrono (bez čekanja na najvišem nivou).
- Omogućeno je automatsko otkrivanje ESM modula u datotekama bez ili sa ekstenzijom “.js”. Ranije su se takve datoteke tretirale kao CommonJS moduli osim ako njihov tip nije eksplicitno naveden u datoteci package.json koja se nalazi u istom direktoriju (“tip”: “modul”). U novoj verziji, za datoteke čiji tip nije naveden u package.json, prvo se pokušava učitati kao CommonJS modul, a ako to ne uspije, onda kao ESM modul.
- Dodata eksperimentalna implementacija kompatibilan s preglednicima API za web pohranu dizajniran je za trajno (klasa localStorage) ili privremeno (klasa sessionStorage) pohranjivanje podataka u formatu ključ/vrijednost. Omogućavanje podrške za web pohranu zahtijeva pokretanje API-ja sa zastavom "--experimental-webstorage" i određivanje putanje do datoteke za pohranu pomoću zastavice "--localstorage-file".
- Dodan eksperimentalni SQLite API za rad sa bazama podataka koristeći SQL upitni jezik i skladište bazirano na SQLite biblioteci. Osim pohranjivanja baze podataka u datoteku na disku, ona se također može smjestiti u memoriju navođenjem “:memory:” umjesto imena datoteke. Gore spomenuti API za Web Storage je također implementiran na SQLite-u, što rezultira dodavanjem SQLite-a kao ovisnosti za Node.js.
- Komanda “node —run” je proglašena stabilnom, dizajnirana za pokretanje skripti definisanih u datoteci package.json.
- Implementirana opciona podrška za keširanje kompajliranog koda na disku kako bi se značajno ubrzalo pokretanje modula. Keširanje je omogućeno preko varijable okruženja NODE_COMPILE_CACHE. U smislu svoje svrhe, ova funkcija podseća na v8-compile-cache paket, ali se razlikuje po većim performansama i podršci za ESM module.
- Objekt Buffer je optimiziran da značajno poveća performanse Buffer.copy() i Buffer.write() metoda.
- Performanse node:fs modula su poboljšane, što takođe smanjuje broj poziva na C++ kod tokom rada.
- V8 motor je ažuriran na verziju 12.9, korištenu u Chromiumu 129.
- Podrška za 32-bitne Windows sisteme je uklonjena.
- Zbog uvođenja karakteristika definisanih u C++8 standardu u Node.js i V20 motoru, zahtevi za verziju GCC kompajlera su povećani. Izgradnja Node.js sada zahtijeva najmanje GCC 12.
Node.js platforma se može koristiti i za podršku web aplikacija na strani servera i za kreiranje standardnih mrežnih programa na strani klijenta i servera. Za proširenje funkcionalnosti Node.js aplikacija, pripremljena je velika kolekcija modula, uključujući i one koji implementiraju serveri i klijenti HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli za integraciju s različitim web frameworkima, WebSocket i Ajax handleri, konektori za DBMS (MySQL, PostgreSQL, SQLite, MongoDB), sistemi za kreiranje predložaka, CSS sistemi, implementacije kriptografskih algoritama i sistema za autorizaciju (OAuth), XML parseri.
Za rukovanje velikim brojem paralelnih zahtjeva, Node.js koristi model izvršavanja asinhronog koda baziran na neblokirajućoj obradi događaja i definiranju rukovatelja povratnim pozivima. Podržane metode za multipleksiranje veza uključuju epoll, kqueue, /dev/poll i select. Za multipleksiranje veze koristi se biblioteka libuv, koja je dodatak za libev na Unix sistemima i IOCP na Windows. Biblioteka libeio se koristi za kreiranje skupa niti, a c-ares je integriran za obavljanje DNS upita u neblokirajućem načinu. Svi sistemski pozivi koji uzrokuju blokiranje izvode se unutar spremišta niti, a zatim, poput rukovatelja signalom, prosljeđuju rezultat svog rada natrag kroz neimenovanu cijev.
Izvršenje JavaScript koda je osigurano korištenjem V8 motora koji je razvio Google (pored toga, Microsoft razvija verziju Node.js sa Chakra-Core motorom). U svojoj srži, Node.js je sličan Perl AnyEvent, Ruby Event Machine, Python Twisted okvirima i implementaciji događaja u Tcl-u, ali je petlja događaja u Node.js skrivena od programera i podsjeća na obradu događaja u web aplikaciji radi u pretraživaču.
izvor: opennet.ru
