Maison interface Web js tutoriel En savoir plus sur certaines fonctionnalités de Node.js_node.js

En savoir plus sur certaines fonctionnalités de Node.js_node.js

May 16, 2016 pm 04:35 PM
node.js 特性

Node.js est un langage backend émergent conçu pour aider les programmeurs à créer rapidement des applications évolutives. Node.js possède de nombreuses fonctionnalités attrayantes, et il existe d'innombrables rapports à ce sujet. Cet article analysera et discutera de fonctionnalités telles que EventEmitter, Streams, Coding Style, Linting et Coding Style pour aider les utilisateurs à mieux comprendre Node.js.

En tant que plate-forme construite sur le runtime JavaScript Chrome, notre connaissance de JavaScript semble être applicable aux applications de nœuds ; sans extensions ou modifications de langage supplémentaires, nous pouvons appliquer notre expérience de programmation frontale à la programmation backend.

EventEmitter (émetteur d'événement)

Tout d'abord, vous devez comprendre le modèle EventEmitter. Il peut envoyer un événement et permettre aux consommateurs de s'abonner à des événements qui les intéressent. Nous pouvons le considérer comme une extension du modèle de livraison de rappel à une fonction asynchrone. En particulier, EventEmitter sera plus avantageux lorsque plusieurs rappels sont nécessaires.

Par exemple, un appelant envoie une requête « lister les fichiers » à un serveur distant. Vous souhaiterez peut-être regrouper les résultats renvoyés et effectuer un rappel pour chaque groupe. Le modèle EventEmitter vous permet d'envoyer un rappel "fichier" sur chaque groupe et d'effectuer un traitement "de fin" lorsque toutes les opérations sont terminées.

Lorsque vous utilisez EventEmitter, il vous suffit de définir les événements et paramètres pertinents.

Copier le code Le code est le suivant :

var EventEmitter = require('events').EventEmitter
var util = require('util');

function MaClasse() {
if (!(this instanceof MyClass)) return new MyClass();

EventEmitter.call(ce);

var soi = ceci
setTimeout(fonction timeoutCb() {
Self.emit('myEvent', 'hello world', 42); }, 1000);
}
util.inherits(MaClasse, EventEmitter);

Le constructeur MyClass crée un déclencheur temporel avec un délai de déclenchement de 1 s et un événement déclencheur de myEvent. Pour utiliser les événements associés, vous devez exécuter la méthode on() :

Copier le code Le code est le suivant :
var monObj = new MaClasse();
var start = Date.now();
monObj.on('myEvent', function myEventCb(str, num) {
console.log('myEvent triggered', str, num, Date.now() - start
); });

Il convient de noter ici que bien que l'événement EventEmitter souscrit soit un événement asynchrone, lorsque l'heure est déclenchée, les actions de l'auditeur seront synchronisées. Par conséquent, si l'événement myEvent ci-dessus comporte 10 écouteurs, tous les écouteurs seront appelés dans l'ordre sans attendre la boucle d'événement.

Si une sous-classe de EventEmitter génère un événement submit('error'), mais qu'aucun auditeur ne s'y abonne, alors la classe de base EventEmitter lèvera une exception, provoquant le déclenchement d'une exception uncaughtException lorsque l'objet de processus est exécuté.

erreur

verror est une extension de la classe de base Error, qui nous permet de définir des messages de sortie en utilisant le format de caractères printf.

Flux

S'il y a un fichier très volumineux qui doit être traité, la méthode idéale devrait être d'en lire une partie et d'en écrire une partie. Quelle que soit la taille du fichier, tant que le temps le permet, le traitement se poursuivra toujours. être complété. La notion de flux doit être utilisée ici. Les flux sont un autre modèle largement utilisé dans Node, qui est l'implémentation d'EventEmitter. Fournit des interfaces lisibles, inscriptibles ou full-duplex. Il s'agit d'une interface abstraite qui fournit des événements de fonctionnement réguliers, notamment : lisible, inscriptible, drain, données, fin et fermeture. Si nous pouvons utiliser des pipelines pour intégrer efficacement ces événements, des opérations interactives plus puissantes seront réalisées.

En utilisant .pipe(), Note peut communiquer avec la contre-pression via le pipeline. La contre-pression signifie : ne lire que ceux qui peuvent être écrits, ou écrire uniquement ceux qui peuvent être lus.

Par exemple, nous envoyons maintenant des données depuis stdin vers un fichier local et un serveur distant :


Copier le code Le code est le suivant :
var fs = require('fs');
var net = require('net');
var localFile = fs.createWriteStream('localFile.tmp');

net.connect('255.255.255.255', 12345, fonction(client) {

process.stdin.pipe(client);
process.stdin.pipe(localFile);
});

Et si nous voulons envoyer des données vers un fichier local et utiliser gunzip pour compresser le flux, nous pouvons faire ceci :

Copier le code Le code est le suivant :

var fs = require('fs');
var zlib = require('zlib');

process.stdin.pipe(zlib.createGunzip()).pipe(fs.createWriteStream('localFile.tar'));

Si vous souhaitez en savoir plus sur le streaming, veuillez cliquer ici.

Flux de contrôle

Étant donné que JS possède des objets, des fermetures et d'autres concepts fonctionnels de première classe, les autorisations de rappel peuvent être facilement définies. Ceci est très pratique lors du prototypage et peut intégrer des autorisations logiques selon les besoins. Mais cela facilite également l’utilisation de fonctions intégrées maladroites.

Par exemple, nous voulons lire une série de fichiers dans l'ordre puis effectuer une certaine tâche :

Copier le code Le code est le suivant :

fs.readFile('firstFile', 'utf8', fonction firstCb(err, firstFile) {
faireQuelquechose(premierFichier);
fs.readFile('secondFile', 'utf8', fonction secondCb(err, secondFile) {
faireQuelque chose(secondFile);
fs.readFile('thirdFile', 'utf8', functionthirdCb(err,thirdFile) {
faireQuelquechose(troisièmeFichier);
});
});
});

Le problème avec ce modèle est :

1. La logique de ces codes est très dispersée et désordonnée, et les processus opérationnels associés sont difficiles à comprendre.
2. Aucune gestion des erreurs ou des exceptions.
3. Les fuites de mémoire de fermeture dans JS sont très courantes et difficiles à diagnostiquer et à détecter.

Si nous voulons effectuer une série d'opérations asynchrones sur un ensemble d'entrées, utiliser une bibliothèque de contrôle de flux est un choix plus judicieux. Vasync est utilisé ici.

vasync est une bibliothèque de contrôle de processus dont l'idée vient des opérations asynchrones. Sa particularité est qu'il permet aux consommateurs de visualiser et d'observer le traitement d'une certaine tâche. Ces informations sont très utiles pour étudier le processus d’apparition d’une erreur.

Style de codage

Le style de programmation peut être considéré comme le sujet le plus controversé, car il est souvent décontracté. Carottes et choux, à chacun ses préférences. L’important est de trouver un style qui convient à la fois à l’individu et à l’équipe. Un certain héritage traditionnel peut améliorer le parcours de développement de Node.

1. Nommez la fonction
2. Essayez de nommer toutes les fonctions.
3. Évitez les fermetures
4. Ne définissez pas d'autres fonctions au sein d'une fonction. Cela peut réduire de nombreux accidents de fuite de mémoire de fermeture inattendus.
5. Des fonctions de plus en plus petites

Bien que le V8 JIT soit un moteur puissant, des fonctions plus petites et rationalisées s'intégreront mieux au V8. De plus, si nos fonctions sont petites et exquises (environ 100 lignes), nous nous remercierons lorsque nous les lirons et les maintiendrons.

Vérifiez le style par programmation : maintenez la cohérence du style et appliquez-le à l'aide d'un outil d'inspection. Nous utilisons jsstyle.

Peluchage (inspection du code)

L'outil Lint peut effectuer une analyse statique du code sans l'exécuter et vérifier les erreurs et les risques potentiels, tels que les instructions break manquantes dans les cas de commutation. Lint n’est pas simplement équivalent à la vérification de style, il vise davantage une analyse objective des risques plutôt qu’une sélection subjective de style. Nous utilisons javascriptlint, qui contient de riches éléments de vérification.

Journalisation

Lorsque nous programmons et codons, nous devons avoir une perspective à long terme. En particulier, réfléchissez aux outils à utiliser pour le débogage. Une excellente première étape est une journalisation efficace. Nous devons identifier les informations pour voir ce qui mérite une attention particulière lors du débogage et ce qui est utilisé pour l'analyse et la recherche pendant l'exécution. Il est recommandé d'utiliser Bunyan, une bibliothèque de journalisation directe Node.js. Le format de sortie des données est JSON.

Client Serveur

Si une application dispose de capacités de traitement distribué, elle sera plus attractive sur le marché. Des interfaces similaires peuvent être décrites à l’aide de l’API HTTP RESTFul ou du TCP JSON brut. Cela permet aux développeurs de combiner leur expérience Node avec des environnements réseau asynchrones et l'utilisation de flux avec des systèmes distribués et évolutifs.

Outils couramment utilisés :

1. restifier

En termes simples, il s'agit d'un outil pour créer des services REST. Il offre une bonne prise en charge du traitement de visualisation et de débogage, et prend en charge Bunyan et DTrace.

2. vite

fast est un outil léger qui utilise TCP pour traiter les messages JSON. Fournit la prise en charge de DTrace, nous permettant d'identifier rapidement les caractéristiques de performances du client serveur.

3. flux de travail

Workflow est basé sur Restify et peut définir des processus métier pour une série de services et d'API distants. Par exemple : état d’erreur, délai d’attente, reconnexion, gestion des congestions, etc.

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un article pour parler du contrôle de la mémoire dans Node Un article pour parler du contrôle de la mémoire dans Node Apr 26, 2023 pm 05:37 PM

Le service Node construit sur une base non bloquante et piloté par les événements présente l'avantage d'une faible consommation de mémoire et est très adapté à la gestion de requêtes réseau massives. Dans le contexte de demandes massives, les questions liées au « contrôle de la mémoire » doivent être prises en compte. 1. Le mécanisme de récupération de place du V8 et les limitations de mémoire Js sont contrôlés par la machine de récupération de place

Parlons en profondeur du module File dans Node Parlons en profondeur du module File dans Node Apr 24, 2023 pm 05:49 PM

Le module de fichiers est une encapsulation des opérations de fichiers sous-jacentes, telles que l'ajout de lecture/écriture/ouverture/fermeture/suppression de fichiers, etc. La plus grande caractéristique du module de fichiers est que toutes les méthodes fournissent deux versions de **synchrone** et ** asynchrone**, with Les méthodes avec le suffixe sync sont toutes des méthodes de synchronisation, et celles qui n'en ont pas sont toutes des méthodes hétérogènes.

Introduction aux différences entre la version Win7 Home et la version Win7 Ultimate Introduction aux différences entre la version Win7 Home et la version Win7 Ultimate Jul 12, 2023 pm 08:41 PM

Tout le monde sait qu'il existe de nombreuses versions du système Win7, telles que la version Win7 Ultimate, la version Win7 Professional, la version Win7 Home, etc. De nombreux utilisateurs sont coincés entre la version Home et la version Ultimate et ne savent pas quelle version choisir. alors aujourd'hui, je vais vous parler des différences entre Win7 Family Meal et Win7 Ultimate. Jetons un coup d'œil. 1. Experience Different Home Basic Edition rend vos opérations quotidiennes plus rapides et plus simples et vous permet d'accéder plus rapidement et plus facilement à vos programmes et documents les plus fréquemment utilisés. Home Premium vous offre la meilleure expérience de divertissement, permettant de profiter et de partager facilement vos émissions de télévision, photos, vidéos et musiques préférées. L'Ultimate Edition intègre toutes les fonctions de chaque édition et possède toutes les fonctions de divertissement et fonctionnalités professionnelles de Windows 7 Home Premium.

En savoir plus sur les tampons dans Node En savoir plus sur les tampons dans Node Apr 25, 2023 pm 07:49 PM

Au début, JS ne fonctionnait que du côté du navigateur. Il était facile de traiter les chaînes codées en Unicode, mais il était difficile de traiter les chaînes binaires et non codées en Unicode. Et le binaire est le format de données le plus bas du package ordinateur, vidéo/audio/programme/réseau.

Maîtriser les concepts clés de Spring MVC : comprendre ces fonctionnalités importantes Maîtriser les concepts clés de Spring MVC : comprendre ces fonctionnalités importantes Dec 29, 2023 am 09:14 AM

Comprendre les fonctionnalités clés de SpringMVC : pour maîtriser ces concepts importants, des exemples de code spécifiques sont nécessaires. SpringMVC est un cadre de développement d'applications Web basé sur Java qui aide les développeurs à créer des structures flexibles et évolutives via le modèle architectural Model-View-Controller (MVC). application Web. Comprendre et maîtriser les fonctionnalités clés de SpringMVC nous permettra de développer et de gérer nos applications Web plus efficacement. Cet article présentera quelques concepts importants de SpringMVC

Un article pour expliquer comment développer efficacement des applications Node.js de couche de présentation Un article pour expliquer comment développer efficacement des applications Node.js de couche de présentation Apr 17, 2023 pm 07:02 PM

Comment utiliser Node.js pour le développement d’applications front-end ? L'article suivant vous présentera la méthode de développement d'applications frontales dans Node, qui implique le développement d'applications de couche de présentation. La solution que j'ai partagée aujourd'hui concerne des scénarios simples. Elle est conçue pour permettre aux développeurs front-end d'effectuer certaines tâches simples de développement côté serveur sans avoir à maîtriser trop de connaissances de base et de connaissances professionnelles sur Node.js, même s'ils n'ont pas de codage. expérience.

Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Mar 19, 2024 pm 02:51 PM

Il n'y a pas de concept de classe au sens traditionnel dans Golang (langage Go), mais il fournit un type de données appelé structure, à travers lequel des fonctionnalités orientées objet similaires aux classes peuvent être obtenues. Dans cet article, nous expliquerons comment utiliser les structures pour implémenter des fonctionnalités orientées objet et fournirons des exemples de code concrets. Définition et utilisation des structures Examinons d'abord la définition et l'utilisation des structures. Dans Golang, les structures peuvent être définies via le mot-clé type, puis utilisées si nécessaire. Les structures peuvent contenir des attributs

Choisissez la version Go applicable, en fonction des besoins et des fonctionnalités Choisissez la version Go applicable, en fonction des besoins et des fonctionnalités Jan 20, 2024 am 09:28 AM

Avec le développement rapide d'Internet, les langages de programmation évoluent et se mettent à jour constamment. Parmi eux, le langage Go, en tant que langage de programmation open source, a attiré beaucoup d'attention ces dernières années. Le langage Go est conçu pour être simple, efficace, sûr et facile à développer et à déployer. Il présente les caractéristiques d'une concurrence élevée, d'une compilation rapide et d'une sécurité de la mémoire, ce qui le rend largement utilisé dans des domaines tels que le développement Web, le cloud computing et le big data. Cependant, il existe actuellement différentes versions du langage Go disponibles. Lors du choix d’une version linguistique Go appropriée, nous devons prendre en compte à la fois les exigences et les fonctionnalités. tête

See all articles