Node.js devrait être l'une des technologies les plus chaudes 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 Chrome JavaScript Runtime, qui est utilisée pour créer facilement des applications réseau rapides et faciles à échelle. Node.js est rendu léger et efficace avec les événements, et est idéal pour les applications en temps réel à forte intensité de données exécutées sur des appareils distribués.
1. Caractéristiques
1.1 E / S asynchrone
Les E / S dits asynchrones sont relatives aux E / S synchrones. De nombreuses opérations d'E / S doivent être effectuées lors de l'exécution du programme, telles que la lecture et la rédaction de fichiers, les entrées et les sorties, la réponse de demande, etc. De manière générale, les opérations d'E / S prennent du temps. Par exemple, en mode de programmation traditionnel, vous devez lire un fichier de plusieurs g, l'ensemble du thread sera interrompu et attendra que le fichier soit lu et continue de s'exécuter. En d'autres termes, les opérations d'E / S bloquent l'exécution du code, réduisant considérablement l'efficacité du programme.
En ce qui concerne les E / S asynchrones, il n'est en fait pas inconnu pour les ingénieurs frontaux, car le lancement d'une demande Ajax est l'appel «asynchrone» le plus courant. Dans le nœud, prendre la lecture d'un fichier (lire un fichier est une opération d'E / S qui prend du temps) à titre d'exemple, il est très similaire à la façon de lancer une demande AJAX:
La copie de code est la suivante:
var fs = require ('fs');
fs.readfile ('/ path', fonction (err, fichier) {
console.log («Lire Fichier terminé»);
});
console.log («Démarrer le fichier de lecture»);
Une fois le code ci-dessus appelé fs.readfile, le code suivant est exécuté immédiatement et le moment où "le fichier de lecture est terminé" 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 demande d'E / S au système d'exploitation et continuera d'exécuter des instructions suivantes. Lorsque le système d'exploitation termine une opération d'E / S, le thread qui effectue l'opération d'E / S est notifié sous la forme d'un événement, et le thread traitera l'événement à un moment précis.
1.2 Fonction de boucle d'événements et de rappel
La boucle dite d'événement signifie que le nœud utilisera le mécanisme de l'événement pour résoudre toutes les opérations asynchrones, et un fil est constamment en boucle pour détecter la file d'attente d'événements. La boucle d'événement vérifie les événements non gérés dans la file d'attente d'événements jusqu'à la fin du programme. La méthode de programmation des événements présente les avantages d'un couplage léger et lâche 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 comment coopérer est un problème. Dans JavaScript, les fonctions de rappel sont partout et les fonctions de rappel sont le meilleur moyen d'accepter les appels asynchrones pour retourner les données.
1.3 simple
Le nœud maintient les caractéristiques de JS en tant que thread unique dans le navigateur. Le plus grand avantage du thread unique est qu'il ne nécessite pas de problème de synchronisation consciente de l'État comme la programmation multithread, il n'y a pas de blocage, ni les frais généraux de la commutation de contexte de thread. Le fil unique a également ses faiblesses, principalement manifestées sous trois aspects: l'incapacité d'utiliser le processeur multi-core; Les erreurs feront la sortie de l'ensemble de la demande et la robustesse de la demande est digne de l'examen d'entrée de troisième cycle; Une grande quantité d'informatique occupera le CPU et rendra impossible de continuer à appeler les E / S asynchrones.
Pour résoudre le problème ci-dessus, Node adopte la même idée que les travailleurs Web HTML5 et utilise Child_Process pour résoudre le problème d'une grande quantité de calcul dans un seul thread. En distribuant les calculs à chaque processus enfant, un grand nombre de calculs peuvent être décomposés et les résultats peuvent être transmis par le biais de messages d'événement entre les processus.
1,4 multiplateforme
Le nœud est multiplateforme, c'est-à-dire que le même ensemble de code JS peut être déployé et s'exécuter sur Windows, Linux, OSX et d'autres plates-formes. Cela est principalement dû au fait que Node a construit une libuv d'architecture au niveau de la plate-forme entre le système d'exploitation et le système de module de niveau supérieur de nœud.
2. Scénarios d'application
1) Applications en temps réel: telles que le chat en ligne, la poussée de notification en temps réel, etc. (comme socket.io)
2) Application distribuée: utiliser des données existantes grâce à des E / S parallèles efficaces
3) Application d'outils: outils massifs, du déploiement de compression frontal (tel que grogne) aux applications d'interface graphique de bureau
4) Applications de jeu: le champ de jeu a des exigences élevées en temps réel et en concurrence (comme le cadre Pomelo de NetEase)
5) Utilisez une interface stable pour améliorer les capacités de rendu Web
6) Environnement de langage de programmation frontal unifié: les développeurs frontaux peuvent rapidement entrer dans le développement du côté serveur (comme la célèbre architecture moyenne à la file complète de JavaScript)