Node.js 12: el futur del JavaScript al costat del servidor

Bloc

Node.js 12: el futur del JavaScript al costat del servidor

Introducció

Node.js ha estat una tecnologia que canvia el joc des de la seva versió llançament inicial el 2009 . En poques paraules, permet als desenvolupadors utilitzar JavaScript per executar scripts al costat del servidor i produir contingut web dinàmic abans que la pàgina s’enviï al navegador web de l’usuari. En conseqüència, Node.js representa un paradigma de JavaScript a tot arreu, que unifica el desenvolupament d'aplicacions web al voltant d'un llenguatge de programació únic, en lloc de necessitar llenguatges diferents per als scripts del servidor i del client.



Si sou fan de JavaScript i Node.js, com jo, estareu encantats de saber que està a punt de millorar molt.

Node 12 nou i millorat

Per què està a punt de millorar JavaScript? Node.js 12 acaba de caure fa uns mesos.



El 23 d'abril de 2019, Node.js 12 es va llançar oficialment , i els entusiastes de JavaScript a tot arreu es van alegrar. I deixem-ho clar, no es tracta només d’una actualització regular de versió antiga, sinó que es tracta d’una gran revisió amb algunes actualitzacions importants, anem a la llista de punts destacats.

Actualitzacions del motor JavaScript V8

A més del ajustaments i millores esperades del rendiment que vénen amb cada nova versió del motor JavaScript V8, hi ha algunes actualitzacions realment destacables aquesta vegada. Això inclou:



  • Traces de pila asíncron de cost zero - això servirà per enriquir la propietat error.stack amb marcs de trucades asíncrons sense afegir temps d'execució addicional al motor V8
  • Trucades més ràpides amb arguments no coincidents - en el passat, V8 havia de gestionar totes les trucades de funcions amb massa o pocs paràmetres de la mateixa manera, cosa que comportava un cost de rendiment. Ara, és prou intel·ligent per saber quan pot ometre aquest pas, reduint la sobrecàrrega de trucades fins a un 60%
  • Funcions i promeses d'asincronia més ràpides - Sí, de fet, utilitzar async és en realitat dos més microtips més ràpid que les promeses ara, si necessiteu un motiu a part de la sintaxi d'estil més síncrona, async / await proporciona als desenvolupadors que no estiguin familiaritzats amb les promeses
  • Anàlisi de JavaScript més ràpid - a l'inici d'una pàgina web, es passa poc menys del 10% del temps V8 analitzant JS. L’últim analitzador JavaScript publicat ha millorat la velocitat d’anàlisi fins a un 30% als ordinadors de sobretaula

Seguretat més segura amb TLS 1.3

TLS, que significa seguretat de la capa de transport, és com Node gestiona la comunicació de flux encriptada.

Amb la publicació de Node.js 12, TLS aconsegueix una actualització a la versió 1.3 , que sembla insignificant, però en realitat és una actualització important, amb nombroses millores de rendiment i seguretat. Tot i que al principi sembla antiintuitiu, TLS 1.3 és en realitat un protocol més senzill d’implementar que TLS 1.2, cosa que el fa més segur, més fàcil de configurar i més ràpid de negociar sessions entre aplicacions.

En utilitzar TLS 1.3, les aplicacions de node augmentaran la privadesa de l’usuari final i, alhora, milloraran el rendiment de les sol·licituds reduint el temps necessari per a l’enllaç de mans HTTPS.

Resum: millor seguretat per a tothom que l’utilitza i menys latència entre els serveis de comunicació. Això suposa una victòria important.

Límits de pila predeterminats configurats correctament

Ara, parlem d'algunes millores de nivell inferior. Fins ara, la mida de l'emmagatzematge dinàmic de JavaScript per defecte era la mida màxima de l'emmagatzematge dinàmic establerta per V8 per utilitzar-la amb navegadors, tret que es configuri manualment el contrari. Amb el llançament de Node.js 12, la mida de l’emmagatzematge dinàmic JS es configurarà en funció de la memòria disponible, cosa que garanteix que Node no intenti utilitzar més memòria de la disponible i finalitzi els processos quan s’esgoti la memòria.

Digueu adéu als errors de memòria que falten (almenys algunes vegades) quan processeu grans quantitats de dades. El vell --max-old-space-size flag encara estarà disponible per establir un límit diferent si cal, però és d'esperar que aquesta funció redueixi la necessitat d'establir el flag.

El parser http per defecte es converteix en llhttp

Sense que molts ho sabessin (jo inclòs), l’actual http_parser La biblioteca utilitzada a Node ha estat extremadament difícil de mantenir i millorar, per això llhttp va néixer. El projecte és un port de http_parser a TypeScript, que després s'executa a través de llparse per generar la sortida C o codi de bits.

Javascript analitza la cadena per flotar

Resulta, llhttp és més ràpid que http_parser en un 156% , està escrit en menys línies de codi i totes les optimitzacions de rendiment es generen automàticament, en lloc del codi optimitzat manualment de http_parser.

A Node.js 12, han decidit canviar l’analitzador predeterminat a llhttp per primera vegada i, de manera més completa, el posen a prova. Esperem que continuï funcionant bé quan ho provin moltes aplicacions diferents amb moltes necessitats diferents.

Informes de diagnòstic a la carta

Si canvieu la conversa a depuració, hi ha una nova funció experimental a Node.js 12 que permet als usuaris generar un informe a petició o quan es produeixin determinats esdeveniments activadors.

Aquest tipus d’informes en temps real poden ajudar a diagnosticar problemes de producció, inclosos bloquejos, rendiment lent, fuites de memòria, alt ús de la CPU, errors inesperats, etc., el tipus de coses que solen trigar hores, si no dies, a depurar, diagnosticar i solucionar.

Dipòsits de pila integrats

Una altra característica d'aquesta versió al voltant dels munts, que segur que accelerarà el procés de depuració, són els abocadors integrats, que s'inclouen amb Node.js 12, ja integrat.

Ara no cal instal·lar mòduls nous per investigar problemes de memòria; només cal que digueu a Node quin tipus de resum de diagnòstic format JSON voleu mitjançant la línia d’ordres o una trucada a l’API i analitzeu tota la informació que podeu gestionar.

Els mòduls natius són més fàcils a Node.js

Fent un pas enrere de les millores de baix nivell, també hi ha coses interessants per als desenvolupadors i els fabricants de mòduls de l’ecosistema Node.

La creació i creació de mòduls natius per a Node continua millorant, amb canvis que inclouen un millor suport per a mòduls natius en combinació amb fils de treball, així com la versió 4 de la versió N-API, que facilita la configuració dels vostres propis fils per a natius funcions asíncrones.

En resum, això vol dir que els creadors i mantenidors de mòduls específics de Node tenen gairebé tan fàcil mantenir aquests mòduls com els creadors de mòduls JavaScript purs. L’augment de la complexitat resultant de que els mantenidors necessitessin reconstruir els fitxers binaris distribuïts per a cada versió de Node.js que volien que admetessin els seus mòduls, ara s’absté en gran mesura per cortesia de N-API.

S'estan produint fils de treball: la bandera experimental s'ha eliminat

Els fils dels treballadors, tot i que existeixen des del node 10, ja no requereixen habilitar una marca, ja que estan en camí de sortir de la fase experimental. Abans de Node.js 11.7.0, no podíeu accedir al mòdul de fil de treball a menys que hàgiu iniciat node amb el --experimental-worker marca a la línia d'ordres.

com comprar la moneda satoshi
$ node -e 'require('worker_threads'); console.log('success');' internal/modules/cjs/loader.js:605 throw err; ^ Error: Cannot find module 'worker_threads' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:603:15) at Function.Module._load (internal/modules/cjs/loader.js:529:25) at Module.require (internal/modules/cjs/loader.js:657:17) at require (internal/modules/cjs/helpers.js:22:18) at [eval]:1:1 at Script.runInThisContext (vm.js:123:20) at Object.runInThisContext (vm.js:312:38) at Object. ([eval]-wrapper:6:22) at Module._compile (internal/modules/cjs/loader.js:721:30) at evalScript (internal/bootstrap/node.js:720:27) $ $ node --experimental-worker -e 'require('worker_threads'); console.log('success');' success $

Els treballadors realment brillen quan realitzen operacions JavaScript intensives en CPU, no ajudaran molt amb el treball intensiu en E / S. Les operacions d'E / S asíncrones integrades del node són més eficients del que poden ser els treballadors.

Millores del temps d'inici

Node.js 11 ha reduït el temps d'inici de els treballadors treballen gairebé el 60% mitjançant el suport de memòria cau de codi integrat.

El node 12 s’ha basat en aquesta idea per generar la memòria cau de codi per a les biblioteques integrades per endavant en temps de compilació, permetent que el fil principal utilitzi la memòria cau de codi per iniciar la càrrega inicial de qualsevol biblioteca integrada escrita en JavaScript.

El el resultat final és un altre 30% accelerar el temps d’inici del fil principal i les vostres aplicacions es carregaran per als usuaris més ràpidament que mai.

Compatible amb el mòdul ES6, ja és a punt

He guardat el millor per a l'últim. Una de les funcions més emocionants per a mi és Suport del mòdul ES6 - la cosa que molts hem estat esperant. Aquesta característica encara és experimental i L’equip del node busca comentaris de la gent que ho prova, però imagina’t poder transmetre sense problemes des de front-end a back-end JavaScript amb una atenció especial al món.

Aquí teniu el millor de la versió més recent de -–experimental-modules conté:

  • Traces de pila asíncron de cost zero - això servirà per enriquir la propietat error.stack amb marcs de trucades asíncrons sense afegir temps d'execució addicional al motor V8
  • Trucades més ràpides amb arguments no coincidents - en el passat, V8 havia de gestionar totes les trucades de funcions amb massa o pocs paràmetres de la mateixa manera, cosa que comportava un cost de rendiment. Ara, és prou intel·ligent per saber quan pot ometre aquest pas, reduint la sobrecàrrega de trucades fins a un 60%
  • Funcions i promeses d'asincronia més ràpides - Sí, de fet, utilitzar async és en realitat dos més microtips més ràpid que les promeses ara, si necessiteu un motiu a part de la sintaxi d'estil més síncrona, async / await proporciona als desenvolupadors que no estiguin familiaritzats amb les promeses
  • Anàlisi de JavaScript més ràpid - a l'inici d'una pàgina web, es passa poc menys del 10% del temps V8 analitzant JS. L’últim analitzador JavaScript publicat ha millorat la velocitat d’anàlisi fins a un 30% als ordinadors de sobretaula
// relative urls ‘./examples.js’ // absolute URLs ‘file:///opt.app/examples.js’ // package names ‘example-package’ // paths within packages example-package/lib/examples.js
  • Traces de pila asíncron de cost zero - això servirà per enriquir la propietat error.stack amb marcs de trucades asíncrons sense afegir temps d'execució addicional al motor V8
  • Trucades més ràpides amb arguments no coincidents - en el passat, V8 havia de gestionar totes les trucades de funcions amb massa o pocs paràmetres de la mateixa manera, cosa que comportava un cost de rendiment. Ara, és prou intel·ligent per saber quan pot ometre aquest pas, reduint la sobrecàrrega de trucades fins a un 60%
  • Funcions i promeses d'asincronia més ràpides - Sí, de fet, utilitzar async és en realitat dos més microtips més ràpid que les promeses ara, si necessiteu un motiu a part de la sintaxi d'estil més síncrona, async / await proporciona als desenvolupadors que no estiguin familiaritzats amb les promeses
  • Anàlisi de JavaScript més ràpid - a l'inici d'una pàgina web, es passa poc menys del 10% del temps V8 analitzant JS. L’últim analitzador JavaScript publicat ha millorat la velocitat d’anàlisi fins a un 30% als ordinadors de sobretaula
// default imports / exports import test from ‘./examples’ // named imports / exports import {example1, example2} from ‘./examples’ // namespace exports import * as samples from ‘./examples’
  • Traces de pila asíncron de cost zero - això servirà per enriquir la propietat error.stack amb marcs de trucades asíncrons sense afegir temps d'execució addicional al motor V8
  • Trucades més ràpides amb arguments no coincidents - en el passat, V8 havia de gestionar totes les trucades de funcions amb massa o pocs paràmetres de la mateixa manera, cosa que comportava un cost de rendiment. Ara, és prou intel·ligent per saber quan pot ometre aquest pas, reduint la sobrecàrrega de trucades fins a un 60%
  • Funcions i promeses d'asincronia més ràpides - Sí, de fet, utilitzar async és en realitat dos més microtips més ràpid que les promeses ara, si necessiteu un motiu a part de la sintaxi d'estil més síncrona, async / await proporciona als desenvolupadors que no estiguin familiaritzats amb les promeses
  • Anàlisi de JavaScript més ràpid - a l'inici d'una pàgina web, es passa poc menys del 10% del temps V8 analitzant JS. L’últim analitzador JavaScript publicat ha millorat la velocitat d’anàlisi fins a un 30% als ordinadors de sobretaula

Al·leluia! Estic realment satisfet per quan això surti de darrere de la bandera per adoptar-lo completament.

Nous estàndards mínims de compilador i plataforma per al node 12

I per últim, però no menys important, hi ha nous requisits per executar el propi Node.

Amb les noves funcions que arriben a Node.js mitjançant millores internes i actualitzacions al C ++ del motor V8, apareixen nous requisits mínims per a Node.js 12. La base de codis ara necessita un mínim de GCC 6 i glibc 2.17 en plataformes diferents de macOS i Windows . Els fitxers binaris publicats utilitzen aquest nou mínim de la cadena d’eines i inclouen noves millores de seguretat i rendiment en temps de compilació.

instal·lar python linux mint

Si feu servir màquines Mac o Windows, hauríeu d’estar bé: els mínims de Windows són els mateixos per executar Node.js 11, els usuaris de Mac necessitaran com a mínim Xcode 8 i un mínim macOS de 10.10 Yosemite. Binaris compatibles amb Linux de nodejs.org donarà suport Enterprise Linux 7 , Debian 8 i Ubuntu 14.04 , però pot ser que siguin necessàries cadenes d’eines personalitzades en sistemes que no admetin GCC 6 de forma nativa. Estic segur que descobrirà el que es necessita prou ràpidament.

Conclusió

Sí, Node.js només té 10 anys, sí, té un fil únic i sí, no és tan adoptat i aprofitat com altres llenguatges de programació, però Node compta amb alguna cosa que cap altre llenguatge de programació pot afirmar: està construït amb JavaScript i pot executar-se tant al client com al servidor .

I els equips i empreses que treballen per donar suport i millorar Node són alguns dels millors i més brillants al negoci. Node ha continuat aprenent de JavaScript bàsic i altres idiomes, escollint les peces adequades per incorporar-les a si mateix, convertint-se en una plataforma cada vegada millor per a desenvolupadors i aplicacions.

Node.js 12 aporta millores extremadament emocionants com el suport del mòdul ES6, una millor seguretat de les aplicacions i temps d’inici més ràpids. Tot i que no hi entrarà Mode LTS (suport a llarg termini) fins a l'octubre de 2019 Estic interessat en aprofundir en aquestes noves funcions i veure què més pot somiar l’equip per continuar convertint aquesta plataforma en una gran solució del servidor.

=============================

# node-js # desenvolupament web

blog.logrocket.com

Node.js 12: el futur del JavaScript al costat del servidor

Node.js 12: El futur de JavaScript del servidor: Node.js 12 aporta millores extremadament emocionants com el suport del mòdul ES6, una millor seguretat de les aplicacions i temps d’inici més ràpids.