Maison  >  Article  >  interface Web  >  Introduction aux caractéristiques et scénarios d'application de Node.js_node.js

Introduction aux caractéristiques et scénarios d'application de Node.js_node.js

WBOY
WBOYoriginal
2016-05-16 16:32:021449parcourir

Node.js devrait être l'une des technologies les plus en vogue aujourd'hui. Cet article présente principalement les caractéristiques et les scénarios d'application de Node.js.

Node.js est une plate-forme construite sur le runtime JavaScript Chrome pour créer facilement des applications Web rapides et facilement évolutives. Node.js utilise des modèles d'E/S non bloquants et pilotés par événements pour devenir léger et efficace, ce qui convient parfaitement aux applications en temps réel gourmandes en données exécutées sur des appareils distribués.

1. Caractéristiques

1.1 E/S asynchrones

Les E/S dites asynchrones sont relatives aux E/S synchrones. Pendant l'exécution du programme, de nombreuses opérations d'E/S doivent être effectuées, telles que la lecture et l'écriture de fichiers, les entrées et sorties, les réponses aux requêtes, etc. D'une manière générale, les opérations d'E/S prennent beaucoup de temps. Par exemple, dans le modèle de programmation traditionnel, si vous souhaitez lire un fichier de plusieurs gigaoctets, le thread entier se mettra en pause et attendra que le fichier soit lu avant de continuer. En d’autres termes, les opérations d’E/S bloquent l’exécution du code et réduisent considérablement l’efficacité du programme.

Concernant les E/S asynchrones, ce n'est en fait pas étranger aux ingénieurs front-end, car le lancement de requêtes Ajax est l'appel « asynchrone » le plus courant. Dans Node, en prenant comme exemple la lecture d'un fichier (la lecture d'un fichier est une opération d'E/S chronophage), cela ressemble beaucoup à la façon de lancer une requête Ajax :

Copier le code Le code est le suivant :

var fs = require('fs');
fs.readFile('/path', function(err, file) {
console.log('Lecture du fichier terminée');
});
console.log('Commencer à lire le fichier');

Après l'appel du code ci-dessus à fs.readFile, le code suivant est exécuté immédiatement et le moment où "la lecture du fichier est terminée" est imprévisible. Lorsqu'un thread rencontre une opération d'E/S, il n'attendra pas que l'opération d'E/S se termine de manière bloquante, mais enverra simplement la requête d'E/S au système d'exploitation et continuera à exécuter les instructions suivantes. Lorsque le système d'exploitation termine l'opération d'E/S, il notifie le thread effectuant l'opération d'E/S sous la forme d'un événement, et le thread traitera l'événement à un moment précis.

1.2 Boucle d'événement et fonction de rappel

La soi-disant boucle d'événements signifie que Node utilisera le mécanisme d'événements pour résoudre toutes les opérations asynchrones, et il existe un thread qui vérifie en permanence la file d'attente des événements. La boucle d'événements vérifie la file d'attente des événements pour les événements non gérés jusqu'à la fin du programme. La méthode de programmation d'événements présente les avantages d'être légère, faiblement couplée et de se concentrer uniquement sur les points de transaction. Cependant, dans le scénario de plusieurs tâches asynchrones, les événements sont indépendants les uns des autres et la manière de collaborer pose problème. En Javascript, les fonctions de rappel sont partout et les fonctions de rappel constituent le meilleur moyen de recevoir les données renvoyées par les appels asynchrones.

1.3 Fil unique

Node conserve les caractéristiques monothread de JS dans le navigateur. Le plus grand avantage du monothread est que vous n'avez pas à vous soucier des problèmes de synchronisation d'état tels que la programmation multithread. Il n'y a pas de blocage et il n'y a pas de surcharge liée au changement de contexte de thread. Le monothreading a également ses faiblesses, principalement sous trois aspects : il ne peut pas utiliser de processeurs multicœurs ; des erreurs entraîneront la fermeture de l'ensemble de l'application, et la robustesse de l'application mérite d'être examinée ; une grande quantité de calculs occupera le processeur ; et rendent impossible la poursuite des appels d'E/S asynchrones.

Afin de résoudre les problèmes ci-dessus, Node adopte la même idée que HTML5 Web Workers, en utilisant child_process pour résoudre le problème d'un montant de calcul important dans un seul thread. Un grand nombre de calculs peuvent être divisés en les distribuant à divers sous-processus, puis en communiquant les résultats via des messages d'événement entre les processus.

1.4 Multiplateforme

Node est multiplateforme, c'est-à-dire que le même ensemble de code JS peut être déployé et exécuté sur Windows, Linux, OSX et d'autres plateformes. Cela est principalement dû au fait que Node construit une architecture de couche plate-forme libuv entre le système d'exploitation et le système de modules supérieurs de Node.

2. Scénarios d'application

1), applications en temps réel : telles que le chat en ligne, les notifications push en temps réel, etc. (telles que socket.io)
2) Applications distribuées : utilisez les données existantes grâce à des E/S parallèles efficaces
3) Applications d'outils : un grand nombre d'outils, allant du déploiement de compression frontale (tel que grunt) aux grandes applications d'interface graphique de bureau
4) Applications de jeu : le domaine du jeu a des exigences élevées en matière de temps réel et de concurrence (comme le framework pomelo de NetEase)
5). Utilisez des interfaces stables pour améliorer les capacités de rendu Web
6) Environnements de langage de programmation front-end et back-end unifiés : les développeurs front-end peuvent rapidement passer au développement côté serveur (comme la célèbre architecture full-stack pure Javascript MEAN)

Déclaration:
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