Node.js 23.0 platformo estis publikigita kun komenca subteno por la TypeScript-lingvo

Node.js 23.0.0, platformo por ruli retajn aplikojn en JavaScript, estis publikigita. Node.js 23.0 estas klasifikita kiel meza branĉo, kiu estos subtenata dum 7 monatoj (ĝis junio 2025). En la venontaj tagoj, la stabiligo de la branĉo Node.js 22 estos kompletigita, kiu ricevos LTS-statuson la 29-an de oktobro kaj estos subtenata ĝis aprilo 2027. Subteno por pasintaj LTS-filioj de Node.js 20.x kaj 18.x daŭros ĝis aprilo 2026 kaj 2025, respektive.

Ĉefaj plibonigoj:

  • Aldonita eksperimenta subteno por TypeScript, kiu permesas eksplicitajn tipdifinojn. Subteno estas ebligita uzante la opciojn "--experimental-strip-types" kaj "--experimental-transform-types". En la kazo de la unua opcio, labori kun TypeScript estas reduktita al purigado de lingvospecifaj tipdifinoj (tipkontrolado ne estas farita, la kodo estas simple konvertita al sentipa JavaScript). La dua opcio konvertas iujn sintaksajn elementojn de TypeScript, kiel enumojn kaj nomspacojn, en JavaScript-kodon.
  • Ebligita defaŭlte estas la kapablo uzi la "require()" alvokon por ŝargi JavaScript ESM-modulojn (ECMAScript-Moduloj) en sinkrona reĝimo. ESM-moduloj estas uzataj en retumiloj kaj anstataŭigas CommonJS-modulojn specifajn por Node.js. Por ŝargi per "require()" en Node.js, la ESM-modulo devas esti ekzekutita sinkrone (sen atendado ĉe la supra nivelo).
  • Aŭtomata detekto de ESM-moduloj en dosieroj sen aŭ kun la etendo ".js" estas provizita. Antaŭe, tiaj dosieroj estis traktataj kiel CommonJS-moduloj krom se ilia tipo estis eksplicite specifita en la package.json-dosiero situanta en la sama dosierujo ("tipo": "modulo"). En la nova versio, por dosieroj, kies tipo ne estas specifita en package.json, ĝi unue provas ŝargi kiel CommonJS-modulo, kaj se tio malsukcesas, tiam kiel ESM-modulo.
  • Eksperimenta efektivigo aldonita kongrua kun retumiloj La API por TTT-Stokado estas desegnita por konstanta (la klaso localStorage) aŭ provizora (la klaso sessionStorage) stokado de ŝlosilo/valoro-datumoj. Ebligi subtenon por TTT-Stokado postulas funkciigi la API-on kun la flago "--experimental-webstorage" kaj specifi la vojon al la stoka dosiero uzante la flagon "--localstorage-file".
  • Aldonita eksperimenta SQLite API por labori kun datumbazoj uzante la SQL-enketlingvon kaj stokadon bazitan sur la SQLite-biblioteko. Krom stokado de la datumbazo en dosiero sur disko, ĝi ankaŭ povas esti metita en memoron specifante ":memory:" anstataŭ la dosiernomo. La supre menciita Web Storage API ankaŭ estas efektivigita aldone al SQLite, rezultigante la aldonon de SQLite kiel dependeco por Node.js.
  • La komando "node —run" estis deklarita stabila, desegnita por ruli skriptojn difinitajn en la dosiero package.json.
  • Efektivigite laŭvola subteno por kaŝmemoro kompilita kodo sur disko por signife akceli la lanĉon de moduloj. Kaŝmemoro estas ebligita per la mediovariablo NODE_COMPILE_CACHE. Laŭ sia celo, la funkcio similas la v8-compile-cache-pakaĵon, sed diferencas en pli alta rendimento kaj subteno por ESM-moduloj.
  • La Buffer objekto estis optimumigita por signife pliigi la agadon de la Buffer.copy() kaj Buffer.write() metodoj.
  • La rendimento de la modulo node:fs estis plibonigita, kio ankaŭ reduktas la nombron da vokoj al C++-kodo dum operacio.
  • La V8-motoro estis ĝisdatigita al versio 12.9, uzita en Chromium 129.
  • Subteno por 32-bitaj Vindozaj sistemoj estis forigita.
  • Pro la enkonduko de funkcioj difinitaj en la C++8-normo en Node.js kaj la V20-motoro, la postuloj por la versio de la GCC-kompililo estis pliigitaj. Konstruado de Node.js nun postulas almenaŭ GCC 12.

La platformo Node.js povas esti uzata kaj por servila subteno de TTT-aplikaĵoj kaj por krei normajn klientflankajn kaj servilajn retprogramojn. Por vastigi la funkciecon de Node.js-aplikaĵoj, granda kolekto de moduloj estis preparita, inkluzive de tiuj, kiuj efektivigas serviloj kaj klientoj de HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduloj por integriĝo kun diversaj TTT-kadroj, WebSocket kaj Ajax-traktiloj, konektiloj al DBMS (MySQL, PostgreSQL, SQLite, MongoDB), ŝablonmotoroj, CSS-motoroj, efektivigoj de kriptografiaj algoritmoj kaj rajtigaj sistemoj (OAuth), XML-analiziloj.

Por trakti grandajn nombrojn da paralelaj petoj, Node.js uzas nesinkronan kodan ekzekutmodelon bazitan sur ne-bloka okazaĵa prilaborado kaj difinaj revokadtraktiloj. Subtenataj metodoj por multipleksaj ligoj inkluzivas epoll, kqueue, /dev/poll kaj select. Por koneksa multipleksado, la biblioteko libuv estas uzata, kiu estas aldonaĵo al libev en Unikso-sistemoj kaj al IOCP en Vindozo. La biblioteko libeio estas uzata por krei fadenan naĝejon, kaj c-ares estas integrita por fari DNS-demandojn en ne-bloka reĝimo. Ĉiuj sistemvokoj kiuj kaŭzas blokadon estas ekzekutitaj ene de la fadena naĝejo kaj tiam, kiel signaltraktantoj, pasas la rezulton de sia laboro reen tra nenomita tubo.

Ekzekuto de JavaScript-kodo estas certigita per la uzo de la V8-motoro evoluigita de Guglo (krome, Microsoft disvolvas version de Node.js kun la Chakra-Core-motoro). En ĝia kerno, Node.js similas al la kadroj Perl AnyEvent, Ruby Event Machine, Python Twisted kaj la efektivigo de eventoj en Tcl, sed la eventa buklo en Node.js estas kaŝita de la programisto kaj similas okazaĵan prilaboradon en TTT-aplikaĵo. kurante en retumilo.

fonto: opennet.ru

Aldoni komenton