Plataforma JavaScript del costat del servidor Node.js 20.0 disponible

Es va llançar Node.js 20.0, una plataforma per executar aplicacions de xarxa en JavaScript. Node.js 20.0 es classifica com a branca de suport a llarg termini, però aquest estat només s'assignarà a l'octubre, després de l'estabilització. Node.js 20.x serà compatible fins al 30 d'abril de 2026. El manteniment de la branca LTS anterior de Node.js 18.x s'allargarà fins a l'abril de 2025 i l'anterior a l'última branca LTS 16.x fins al setembre de 2023. La branca 14.x LTS s'interromprà el 30 d'abril i la branca de prova Node.js 19.x s'interromprà l'1 de juny.

Principals millores:

  • El motor V8 s'ha actualitzat a la versió 11.3, utilitzada a Chromium 113. Els canvis en comparació amb la branca Node.js 19, que utilitzava el motor Chromium 107, inclouen les funcions String.prototype.isWellFormed i toWellFormed, Array.prototype i TypedArray. mètodes prototip per treballar amb una còpia quan es canvien els objectes Array i TypedArray, la bandera "v" a RegExp, suport per canviar la mida de ArrayBuffer i augmentar la mida de SharedArrayBuffer, recursivitat de la cua (tail-call) a WebAssembly.
  • S'ha proposat un mecanisme experimental de model de permisos que permet restringir l'accés a determinats recursos durant l'execució. El suport del model de permisos s'habilita especificant la marca "--experimental-permission" quan s'executa. La implementació inicial ofereix opcions per limitar l'accés d'escriptura (--allow-fs-write) i de lectura (--allow-fs-read) a determinades parts del sistema de fitxers, processos fills (--allow-child-process) i complements (--no-addons) ) i fils (--allow-worker). Per exemple, per permetre escriure al directori /tmp i llegir el fitxer /home/index.js, podeu especificar: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home /index.js index .js

    Per comprovar l'accés, es recomana utilitzar el mètode process.permission.has(), per exemple, "process.permission.has('fs.write',"/tmp/test").

  • Els controladors del mòdul extern (ESM) ECMAScript carregats mitjançant l'opció "--experimental-loader" ara s'executen en un fil separat, aïllat del fil principal, eliminant la intersecció del codi de l'aplicació i els mòduls ESM carregats. De manera similar als navegadors, el mètode import.meta.resolve() ara s'executa de manera sincrònica quan es crida des d'una aplicació. En una de les properes branques de Node.js, es preveu que el suport per carregar ESM es transfereixi a la categoria de funcions estables.
  • El mòdul node:test (test_runner), dissenyat per crear i executar proves en JavaScript que retornen resultats en format TAP (Test Anything Protocol), s'ha fet estable.
  • Es va formar un equip de desenvolupament separat responsable de l'optimització del rendiment, que, en preparar una nova branca, va treballar per accelerar diversos components de temps d'execució, com ara l'anàlisi d'URL, fetch() i EventTarget. Per exemple, la sobrecàrrega d'inicialització d'EventTarget s'ha reduït a la meitat, s'ha millorat significativament el rendiment del mètode URL.canParse() i s'ha millorat l'eficiència dels temporitzadors. També inclou el llançament d'un analitzador d'URL d'alt rendiment, Ada 2.0, escrit en C++.
  • Va continuar el desenvolupament de la capacitat experimental per lliurar aplicacions en forma d'un únic fitxer executable (SEA, Single Executable Applications). Per crear un fitxer executable ara cal substituir un blob generat a partir d'un fitxer de configuració en format JSON (en lloc de substituir un fitxer JavaScript).
  • Compatibilitat millorada de l'API Web Crypto amb implementacions d'altres projectes.
  • S'ha afegit suport oficial per a Windows als sistemes ARM64.
  • S'ha continuat la implementació del suport per a les extensions WASI (WebAssembly System Interface) per crear aplicacions de WebAssembly autònomes. S'ha eliminat la necessitat d'especificar una marca especial de línia d'ordres per habilitar el suport WASI.

La plataforma Node.js es pot utilitzar tant per al manteniment del servidor d'aplicacions web com per a la creació de programes habituals de xarxa de client i servidor. Per ampliar la funcionalitat de les aplicacions per a Node.js, s'ha preparat una gran col·lecció de mòduls, en els quals es poden trobar mòduls amb la implementació de servidors i clients HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, mòduls per a la integració. amb diversos frameworks web, gestors WebSocket i Ajax, connectors DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motors de plantilles, motors CSS, implementacions d'algoritmes criptogràfics i sistemes d'autorització (OAuth), analitzadors XML.

Per garantir el processament d'un gran nombre de sol·licituds paral·leles, Node.js utilitza un model d'execució de codi asíncron basat en la gestió d'esdeveniments sense bloqueig i la definició de gestors de devolució de trucada. Els mètodes admesos per a la multiplexació de connexions són epoll, kqueue, /dev/poll i select. Per a la multiplexació de connexions, s'utilitza la biblioteca libuv, que és un complement per a libev en sistemes Unix i IOCP a Windows. La biblioteca libeio s'utilitza per crear un grup de fils, c-ares s'integra per realitzar consultes DNS en mode sense bloqueig. Totes les trucades al sistema que causen bloqueig s'executen dins del grup de fils i després, com els controladors de senyals, transfereixen el resultat del seu treball de nou a través d'una canonada sense nom (pipe). L'execució del codi JavaScript es proporciona mitjançant l'ús del motor V8 desenvolupat per Google (a més, Microsoft està desenvolupant una versió de Node.js amb el motor Chakra-Core).

En el seu nucli, Node.js és similar als marcs Perl AnyEvent, Ruby Event Machine, Python Twisted i la implementació d'esdeveniments Tcl, però el bucle d'esdeveniments a Node.js està ocult per al desenvolupador i s'assembla a la gestió d'esdeveniments en una aplicació web que s'executa. al navegador. Quan escriviu aplicacions per a node.js, heu de tenir en compte les especificitats de la programació basada en esdeveniments, per exemple, en lloc de fer "var resultat = db.query("select..");" amb l'espera de la finalització del treball i el processament posterior dels resultats, Node.js utilitza el principi d'execució asíncrona, és a dir. el codi es transforma en "db.query("seleccionar..", funció (resultat) {processament de resultats});", en el qual el control passarà instantàniament a més codi i el resultat de la consulta es processarà a mesura que arribin les dades.

Font: opennet.ru

Afegeix comentari