La dernière version majeure de Node.js apporte de nombreuses améliorations significatives à la communauté JavaScript, y compris un moteur JavaScript mis à jour, NPM version 5, Google's V8, Node.js API, ASYNC_HOOKS, UN ESYSER URL Whawg, des tampons plus sécurisés et plus. Ici, nous vous mettrons à jour sur ces fonctionnalités et les autres aspects les plus importants de cette version.
Nœud.js 8 est libéré sous le nom de code carbone et est disponible maintenant à partir de la Site nœud.js site . Il sera activement travaillé sur 18 mois (aucune nouvelle fonctionnalité, juste des corrections de bugs, des améliorations de sécurité et des mises à jour des NPM), avant d'entrer en mode de maintenance. Comme avec les versions précédentes, pendant les versions de mode de maintenance ne recevra que des mises à jour de sécurité critiques et des corrections de bugs.
Il est prudent de dire que depuis que Node.js existe autour de ce qui est l'une des plus grandes mises à jour que l'exécution a jamais été reçue - cela évolue la manière dont les add-ons natifs sont écrits et apporte également des améliorations de sécurité et de performance supplémentaires.
Detassement Aidez les entreprises à réussir avec Node.js depuis quatre ans avec formation, conseil ou développement. L'une des plus grandes luttes que nous avions ajoutes à ajouter des dépendances autochtones à des projets.
Avant Node.js 8, si les applications dépendaient des modules avec code natif, chaque fois que les nouvelles versions de Node.Js majeures sont arrivées, en tant que maintenance de l'application, vous deviez recompiler vos dépendances. Si vous avez eu de la chance, ils ont travaillé au début.
Ce processus a été rendu possible avec le formidable module de travail Mainteners mettant en train de faire fonctionner leurs modules sur des versions node.js incompatibles, principalement à l'aide d'un module appelé NAN (nœud.js abstractions natives).
Ce processus est loin d'être idéal, car de nombreuses entreprises n'ont pas été mises à jour de leurs dépendances s'ils ne pouvaient pas être compilés, et il a également mis une énorme charge de travail supplémentaire sur les responsables du module. Pour résoudre ce problème, le nœud.js API (ou N-API) a été introduit.
Le nœud.js API est l'une des améliorations les plus significatives des nœuds.js 8. Il apporte une ABI bien définie (interface binaire d'application bien définie) à Node.js pour faire sa machine virtuelle agnostique. Cela signifie que les modules natifs ne fonctionnent pas uniquement avec différentes versions de nœud.js à l'aide du moteur JavaScript V8 de Google, mais également avec le chakra de Microsoft.
Pour l'instant, la N-API est dans un état expérimental, ce qui signifie que les changements importants peuvent arriver à la fois à la mise en œuvre et à l'API. Avec cela, les responsables de modules natifs sont encouragés à essayer la nouvelle interface et à donner des commentaires.
Si vous êtes un module de mainteneur, vous pouvez libérer une version N-API de votre module en parallèle avec votre version du module principal. Pour ce faire, la recommandation officielle est de publier une version de votre module avec la balise N-API à NPM.
Pour publier une version N-API, vous devez:
De cette façon, vous vous assurez que la version N-API ne deviendra pas la dernière version, donc si une personne installe votre module, ils obtiennent par défaut la version non N-API.
Fil, le gestionnaire de paquets créé par les ingénieurs de Facebook, a été publié en octobre 2016. Il a essayé de remédier à certaines lacunes du client NPM officiel, principalement en devenant plus performant et déterministe. La plupart de ces innovations sont également présentées dans le NPM 5.
Tout comme le fil, NPM 5 a introduit un mécanisme de fichier de verrouillage - chaque fois que vous installez une nouvelle dépendance à votre projet, il sera automatiquement ajouté non seulement à paquet.json , mais un nouveau fichier appelé paquet-serrure.json ainsi que.
Vous pouvez demander quelle est la différence entre paquet-serrure.json et npm-strinkwrap.json , alors que le NPM-Strinkwrap a été dans NPM depuis pour toujours? Longue histoire courte, ils sont essentiellement les mêmes, mais paquet-serrure.json est créé automatiquement.
Leur but est de décrire exactement quel NPM de dépendance doit créer pour votre colis. Si vous avez les deux, NPM-StrinkWrap aura la priorité. Basé sur la recommandation de NPM, vous devriez utiliser npm-strinkwrap.json Si vous voulez le publier, vos consommateurs de module l'utiliseront également. D'autre part, vous devez utiliser le paquet-serrure.json en interne - même enregistré dans des référentiels.
Mais les améliorations apportées à NPM 5 n'ont pas été arrêtées avec l'ajout d'un fichier de verrouillage - avec la nouvelle version, tous les modules que vous installez sont également enregistrés automatiquement et ils seront ajoutés à la fois à votre paquet.json et paquet-serrure.json déposer.
La façon dont les scripts NPM fonctionnent ont également changé un peu. Tout d'abord, les scripts préinstallés fonctionnent désormais avant tout le reste, ils peuvent donc modifier le répertoire Node_Modules avant la lecture de la CLI. En outre, deux nouveaux scripts ont été ajoutés - Préparatifs et Postpack. Ils fonctionnent tous les deux sur NPM Pack et NPM Publier également, mais pas sur une installation NPM.
Au coeur de Node.js est le moteur JavaScript qui interprète votre code JavaScript, crée ByTecode à partir de lui et permet à votre demande de fonctionner. Avec la nouvelle version de Node.js 8, cela a également été mis à jour.
Avec le moteur V8 mis à jour, des améliorations majeures des performances sont introduites - mais plus important encore, il est garanti d'avoir une interface binaire d'application compatible avant. Cela signifie que nœud.js sera en mesure de mettre à jour le moteur V8 sans une version node.js majeure.
Ceci est crucial, car les versions les plus récentes du moteur V8 introduiront un nouveau pipeline de compilateur, qui introduira d'autres améliorations de performance aux nœuds.js. Cette mise à jour était si importante que c'était la raison pour laquelle la date de sortie Node.Js 8 d'origine a été reportée.
Le pipeline actuel est trop complexe et l'introduction de nouvelles caractéristiques linguistiques signifie généralement toucher plusieurs parties du pipeline. Avec le nouveau pipeline, il deviendra beaucoup plus simple.
Allumage, le nouvel interprète et le turbophan, le nouveau compilateur d'optimisation, sont en développement pendant près de trois ans et demi. Ils sont les bases sur lesquelles les nouvelles fonctionnalités de la langue seront construites. Ils comprennent l'expérience que l'équipe V8 de Google collectée à partir de la mesure des applications JavaScript réelles.
Pour mieux comprendre ce que les crochets ASYNC sont, prenons un pas en arrière et se familiarisent d'abord avec la poursuite du stockage local. Ils travaillent comme le stockage de thread-local dans la programmation filetée, mais dans Node.js il utilise des rappels pour transmettre le contexte.
Imaginez que vous écriviez une application qui récupère un produit à partir de la base de données, puis sur vous souhaitez l'envoyer dans votre réponse HTML:
Cons Creeenamespace = exiger («Suite-local-local»). CreeNamespace
const Session = CreeNamespace ('My-App-Session')
const dB = nécessite ('./ db.js')
fonction onrequest (options, suivant) {
db.fetchuserbyID (options.id, fonction (erreur, utilisateur) {
Si (erreur) {
retour suivant (erreur)
}
session.set ('utilisateur', utilisateur)
suivant()
})
Plus tard, si vous souhaitez accéder à l'objet utilisateur, tout ce que vous avez à faire est de l'attraper à partir du stockage local:
const getNamespace = exiger («maintien-local-local»). GetNamespace
const Session = getNamespace ('ma session')
const rendu = exiger ('./ rendu.js')
Fonction finition (réponse) {
const utilisateur = session.get ("utilisateur")
Render ({utilisateur: utilisateur}). Tuyau (réponse)
}
Cette technique est largement utilisée par les fournisseurs de surveillance des performances des applications, tels que la trace par la montée en hausse, pour garder le contexte d'exécution et collecter des informations de surveillance à partir de systèmes de production.
Avec des crochets ASYNC, une caractéristique similaire est déplacée vers le nœud.js Core - il aide à suivre les demandes et les gestionnaires asynchrones à travers leur cycle de vie. Le async_hooks Le module fournit une API pour enregistrer les rappels suivis de la durée de vie des ressources asynchrones créées dans une application nœud.js.
Avant Node.Js 8, si vous souhaitez utiliser les modules de base dans une application utilisant des promesses, vous deviez envelopper manuellement les modules de base afin qu'ils puissent être utilisés de la même manière. Cela semblait quelque chose comme ça:
const fs = nécessite ('fs')
Fonction ReadFilePomise (... args) {
retourner nouvelle promesse ((résolution, rejet) = & gt; {
fs.readfile (... args, (err, résultat) = & gt; {
Si (err) {
Renvoyer la résolution (err)
}
résolution (résultat)
})
})
}
ReadfilePomise ('./ paquet.json', 'utf-8')
.Ce ((res) = & gt; console.log (res))
.Catch ((err) = & gt; console.log (err))
Avec Node.Js 8, une nouvelle méthode d'assistance est ajoutée au module UTIL Core, Util.Promisify. Il permet d'envelopper les API de style Node.js Standard NODE.JS dans une fonction qui renvoie des promesses.
En utilisant cette fonction, l'extrait ci-dessus est simplifié et devient ceci:
const fs = nécessite ('fs')
const s'inclure = exiger ("util"). Promisifie
ReadfilePomise = Promisify (fs.readfile)
ReadfilePomise ('./ paquet.json', 'utf-8')
.Ce ((res) = & gt; console.log (res))
.Catch ((err) = & gt; console.log (err))
Avant Node.js version 8, les tampons alloués à l'aide du nouveau constructeur de mémoire tampon (numéro) n'ont pas initialisé l'espace mémoire avec des zéros. En conséquence, de nouvelles instances tampons pourraient contenir des informations sensibles, entraînant des problèmes de sécurité graves - même des modules populaires tels que Mongoose, WS ou le module de demande ont été affectés.
Mais comment sommes-nous arrivés là-bas? Lorsque JavaScript a été déplacé du navigateur sur le côté du serveur, il y avait un besoin de traitement de données rapide et facile - de sorte que la classe tampon a été ajoutée. Le tampon est un réseau mutable de données binaires. Lorsqu'il est utilisé avec le constructeur qui demande la taille du nouveau tampon, il vient de réserver l'espace mémoire, mais ne l'a pas nettoyé.
Lorsque votre serveur peut servir plusieurs utilisateurs simultanément (contrairement à votre navigateur), il est possible que l'espace mémoire fraîchement alloué contienne des informations sensibles à partir d'autres utilisateurs (même des mots de passe!), Et peut potentiellement être exposé à un attaquant.
Bien que ce fut une décision intentionnelle de stimuler la performance de la nouvelle création tampon, pour la plupart d'entre nous, ce n'était pas l'utilisation prévue - même si elle a été documentée. Pour cette raison, commencer par le nœud.js 8, les tampons alloués à l'aide de nouveaux tampons (nombre) ou tampon (nombre) seront automatiquement remplis de zéros.
Avant Node.js 8, si vous vouliez déboguer vos candidatures nœud.js, l'une des solutions les plus faciles était de démarrer le débogueur intégré, à l'aide de Node Débug index.js. Avec Node.Js 8, il s'agit de retiré et remplacé par l'inspecteur de nœuds. Vous pouvez toujours utiliser le débogueur CLI, mais il sera supprimé sous peu.
À partir de maintenant, vous devriez utiliser le nœud --Inspect Index.js ou noeud --Inspect-brk index.js Si vous souhaitez que le débogueur met un point d'arrêt sur la première ligne de l'application. Une fois que vous l'avez exécutée, vous recevrez une liaison WebSocket que Google Chrome peut utiliser pour connecter son débogueur.
Vous devriez vous diriger vers Chrome: // Inspecter Dans votre navigateur Chrome, vous reconnaîtrez automatiquement la demande de numérisation en cours d'exécution.js, vous permettant de vous connecter. Une fois que vous avez connecté à votre processus, vous obtiendrez le débogueur de Chrome pour inspecter votre candidature en cours d'exécution.js.
Auparavant, si vous vouliez vérifier une erreur que vous avez reçue au moment de l'exécution et agissez en conséquence, dans la plupart des cas, vous avez dû vérifier le message d'erreur. Ceci a été sujette d'erreur, car les messages d'erreur peuvent avoir changé avec de nouvelles versions nœud.js.
Avec nœud.js 8, des codes d'erreur statique ont été attribués à la plupart des erreurs - il s'agit toujours d'un travail en cours, mais une fois terminé, ces codes d'erreur ne changeront pas, même si le message de l'erreur est .
Par exemple, le nouvel introduit Whawg URL API va lancer un Err_invalid_url Erreur dans l'extrait suivant, car le paramètre n'est pas une URL valide:
const URL = exiger ('URL'). URL
const myurl = nouvelle URL ('/ foo')
Comme vous pouvez le constater, la sortie de la mise à jour NODE.JS 8 a apporté de nombreuses améliorations nouvelles et passionnantes de la communauté JavaScript. Commencer à expérimenter avec toutes ces nouvelles fonctionnalités vous-même, vous dirigez vers nœudjs.org , Téléchargez le nœud.js 8 binaires et commencez à jouer avec votre nouvel outil!
Cet article est apparu à l'origine dans magazine net numéro 296. Achetez-le ici .
Articles Liés:
[DIX] [DIX] [DIX] [dix] [DIX] Page 1 sur 2: Commentaire..
[DIX] [DIX] [DIX] [dix] [DIX] Savoir Redimensionnerner Une image dans Photoshop est une compétition Fond..
[dix] [dix] [dix] [dix] J'ai été directeur d'animation depuis quelques années et j'ai travaillé a..
[dix] [dix] [dix] [dix] Créer une scène de la ville de science-fiction apocalyptique dans ..
[dix] [dix] [dix] [dix] Dans cette illustration de Geisha, je voulais capturer une ambiance urbaine g..
[dix] [dix] [dix] [dix] Excellente utilisation de théorie des couleurs ..
[dix] [dix] [dix] [dix] Le point fort de Houdini a toujours été sa nature procédurale. Avec quelqu..
[dix] [dix] [dix] [dix] Quand je voulais créer un morceau amusant de Art 3D ..