Maison > Article > interface Web > Introduction aux caractéristiques et scénarios d'application de Node.js
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 réseau 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 qui prend du temps), cela ressemble beaucoup au lancement d'une requête Ajax :
var fs = require('fs'); fs.readFile('/path', function(err, file) { console.log('读取文件完成'); }); console.log('开始读取文件');
Le code ci-dessus appelle fs . Après 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énement signifie que Node utilisera le mécanisme d'événement pour résoudre toutes les opérations asynchrones, et il y a un thread qui boucle constamment pour détecter le 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 Monothread
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'une grande quantité de calculs 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. .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 (comme Grunt) au bureau applications d'interface graphique
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), utilisant des interfaces stables pour améliorer les capacités de rendu Web
6) , langages de programmation front-end et back-end Environnement unifié : les développeurs front-end peuvent rapidement passer au développement côté serveur (comme la célèbre architecture MEAN full-stack pure Javascript)
Pour plus de fonctionnalités Node.js et les articles liés aux scénarios d'application, veuillez faire attention à PHP Chinese net !