1. Le rôle de Node.js,
La signification des E / S, (E / S est l'abréviation de l'entrée / sortie, telle que: le texte du type de clavier, l'entrée et le texte s'affiche à l'écran. Déplace de la souris, la souris est déplacée, la souris est déplacée sur l'écran, l'entrée de borne et la sortie vue. Etc.)
Le problème que Node.js veut résoudre, (traiter les entrées, une concurrence élevée. Par exemple, il peut y avoir des millions de joueurs dans des jeux en ligne et des millions d'intrants, etc.) (Node.js est adapté à la catégorie: Node.js est le plus approprié lorsqu'une application doit envoyer et recevoir des données sur le réseau. Il peut s'agir d'une API tiers, d'un appareil en réseau, ou d'un temps réel entre un navigateur et un serveur)
La signification de la concurrence (le terme concurrence décrit que les choses se produiront en même temps et peuvent interagir les unes avec les autres.
E / S du réseau de démonstration
Code JS
var http = require ('http'), urls = ['www.baidu.com', 'www.10jqka.com.cn', 'www.duokan.com']; fonction fetchPage (url) {var start = new Date (); http.get ({host: url}, function (res) {console.log ("Got Response from:" + url); console.log ("request Take:", new Date () - start, "MS");}); } pour (var i = 0; i <urls.length; i ++) {fetchPage (urls [i]); }Nommé node.js
Nous exécutons Node Node.js dans le terminal
Sortir:
Nous avons besoin de Node.js pour accéder à trois URL et signaler la réponse reçue et le temps qu'il a pris.
Nous pouvons voir que le temps de sortie est différent pour les deux fois. Affecté par divers facteurs, le délai de résolution des demandes DNS, des programmes de serveurs occupés, etc.
Pourquoi JavaScript est-il une langue axée sur l'événement
JavaScript tourne autour de l'architecture d'événement qui était initialement associée au modèle d'objet de document (DOM). Les développeurs peuvent faire des choses lorsque des événements se produisent. Ces événements incluent les utilisateurs cliquant sur un élément, la page termine le chargement, etc. En utilisant des événements, les développeurs peuvent écrire des auditeurs pour des événements qui sont déclenchés lorsque des événements se produisent.
2. Rappel
1. Qu'est-ce qu'un rappel
2. Analyser le rappel
Un rappel fait référence à la transmission d'une fonction comme un argument à une autre fonction et est généralement appelée une fois la première fonction terminée.
Exemple: par exemple, la méthode hide () en jQuery,
Code JS
1, $ ("p"). Hide ('Slow'); 2, $ ("p"). Hide ('Slow', function () {alert ("Le paragraphe est maintenant caché")});Les rappels sont facultatifs.
1 Aucun rappel n'est nécessaire
2. Il y a un rappel. Lorsque le paragraphe est caché, il sera appelé, montrant une invite d'alerte.
Afin de voir la différence entre le code avec et sans rappel
Code JS
$ ("p"). hide ('lent'); alert ("le paragraphe est maintenant caché"); // 1 $ ("p"). hide ('Slow', function () {alert ("le paragraphe est maintenant caché")}); // 21. Il n'y a pas de rappel et l'ordre d'exécution est le même. Cependant, nous pouvons voir que le paragraphe P n'a pas été complètement caché, Alert sort.
2. Il y a un rappel et l'exécution est effectuée une fois la peau terminée.
Analyser les rappels
Code JS
Fonction Havebreakfast (nourriture, boisson, rappel) {Console.log ('ayant un barakfast de' + Food + ',' + Drink); if (callback && typeof (callback) === "fonction") {callback (); }} havebreakfast ('FOast', 'Coffee', function () {Console.log ('Breakfast fini. Temps pour aller travailler!');});Sortir:
Avoir Barakfast de mousse, petit-déjeuner raffiné. Il est temps d'aller travailler!
Voici une fonction créée avec trois paramètres, le troisième paramètre est un rappel, qui doit être une fonction.
La fonction HaveBreakFast enregistre ce que vous mangez dans la console, puis appelle la fonction de rappel qui lui est transmise en tant que paramètre.
Comment utiliser les rappels pour node.js
Exemple d'utilisation du module de système de fichiers pour lire le contenu du fichier à partir du disque dans node.js
Code JS
var fs = require ('fs'); fs.readfile ('somefile.txt', 'utf8', fonction (err, data) {if (err) lancer err; console.log (data);});Le résultat est: le contenu dans SomeFile.txt.
1. Le module FS (Système de fichiers) est demandé pour une utilisation dans le script
2. Le chemin du fichier sur le système de fichiers est fourni comme premier paramètre à la méthode fs.readfile.
3. Le deuxième paramètre est UTF8, qui indique le codage du fichier
4. Fournir la fonction de rappel comme troisième paramètre de la méthode Fs.Readfile
5. Le premier paramètre de la fonction de rappel est ERR, qui est utilisé pour enregistrer l'erreur renvoyée lors de la lecture du fichier.
6. Le deuxième paramètre de la fonction de rappel consiste à le frapper, et l'utilisateur enregistre les données renvoyées par le fichier de lecture.
7. Une fois le fichier lu, le rappel sera appelé.
8. Si ERR est vrai, une erreur sera lancée.
9. Si ERR est faux, les données du fichier peuvent être utilisées.
10. Dans ce cas, les données seront enregistrées sur la console.
Un autre est le module HTTP, le module HTTP permet aux développeurs de créer des clients et des serveurs HTTP.
Code JS
var http = require ('http'); http.get ({host: 'shapeshed.com'}, function (res) {console.log ("Got Response:" + res.statuscode);}). sur ('error', function (e) {console.log ("Got Error:" + e.Message);});RÉSULTAT: RÉPONSE AUCOUR: 200
1. Demandez le module HTTP à utiliser dans le script
2. Fournir deux paramètres à la méthode http.get ()
3. Le premier paramètre est l'objet d'option. Dans cet exemple, vous devez obtenir la page d'accueil de Shapeshed.com
4. Le deuxième paramètre est une fonction de rappel avec la réponse comme paramètre
5. Lorsque le serveur distant renvoie la fonction correspondante, la fonction de rappel sera déclenchée.
6. Enregistrez le code d'état de réponse dans la fonction de rappel. S'il y a une erreur, vous pouvez l'enregistrer.
Ensuite, voyons que 4 opérations différentes d'E / S se produisent, ils utilisent tous des rappels
Code JS
var fs = require ('fs'), http = require ('http'); http.get ({host: 'www.baidu.com'}, function (res) {console.log ("baidu.com");}). sur ('error', function (e) {console.log ("Got Error:" + e.Message);}); fs.readfile ('somefile.txt', 'utf8', fonction (err, data) {if (err) lancer err; console.log ("somefile");}); http.get ({host: 'www.duokan.com'}, fonction (res) {console.log ("duokan.com");}). sur ('error', function (e) {console.log ("Got Error:" + e.Message);}); fs.readfile ('somefile2.txt', 'utf8', fonction (err, data) {if (err) lancer err; console.log ("someFile2");});Pouvons-nous savoir quelle opération revient en premier?
La supposition est que les deux fichiers lus à partir du disque sont renvoyés en premier, car il n'est pas nécessaire d'entrer dans le réseau, mais il est difficile pour nous de dire quel fichier reviendra en premier, car nous ne connaissons pas la taille du fichier. Pour l'acquisition de deux pages d'accueil, le script doit entrer dans le réseau et le temps de réponse dépend de nombreuses choses imprévisibles. Le processus Node.js ne sortira pas tant qu'il n'y a pas de rappel enregistré qui n'a pas été déclenché. Les rappels résolvent d'abord l'imprévisibilité, et c'est aussi un moyen efficace de faire face à la concurrence (ou de faire plus d'une chose à la fois).
Voici les résultats de mon exécution
Code synchrone et asynchrone
Regardez d'abord le code, synchroniser (ou bloquer) le code
Code JS
fonction Sleep (millisecondes) {var start = new Date (). getTime (); while ((new Date (). GetTime () -Start) <MIMIONSECONDS) {}} fonction fetchPage () {console.log ('fetching page'); Sleep (2000); console.log («données renvoyées à partir de la page de demande»); } fonction fetchapi () {console.log ('fetching api'); Sleep (2000); console.log («données renvoyées de l'API»); } fetchPage (); fetchapi ();Lorsque le script est en cours d'exécution, la fonction fetchPage () sera appelée. Jusqu'à son retour, l'exécution du script est bloquée. Avant que la fonction fetchPage () ne revienne, le programme ne peut pas être déplacé vers la fonction fetchapi (). C'est ce qu'on appelle une opération de blocage.
Node.js n'utilise presque jamais ce style de codage, mais appelle les rappels de manière asynchrone.
Regardez le code suivant,
Code JS
var http = require ('http'); fonction fetchPage () {console.log ('fetching page'); http.get ({host: 'www.baidu.com', chemin: '/? Delay = 2000'}, function (res) {console.log ('données renvoyées par demande de page');}). sur ('error', fonction (e) {console.log ("il y avait une erreur" + e);}); } fonction fetchapi () {console.log ('fetching api'); http.get ({host: 'www.baidu.com', chemin: '/? Delay = 2000'}, function (res) {console.log ('données renvoyées à partir de la demande de l'api');}). sur ('error', fonction (e) {console.log ("il y avait une erreur" + e);}); } fetchPage (); fetchapi ();Lorsque ce code est autorisé, vous n'attendez plus que la fonction fetchPage () revienne et la fonction fetchapi () sera appelée immédiatement. Le code est bloqué en utilisant des rappels. Une fois appelées, les deux fonctions écoutent le retour du serveur distant et déclenchent la fonction de rappel.
Notez que l'ordre de retour de ces fonctions ne peut pas être garanti, mais est lié au réseau.
Boucle d'événement
Node.js utilise la boucle d'événement de JavaScript pour prendre en charge le style de programmation asynchrone qu'il préconise. Fondamentalement, la boucle d'événement permet au système d'enregistrer d'abord la fonction de rappel, puis d'exécuter lorsque l'événement se produit à l'avenir. Il peut s'agir de données de retour de base de données ou de données de retour de demande HTTP. Étant donné que l'exécution de la fonction de rappel est reportée jusqu'à ce que l'événement soit inversé, il n'est pas nécessaire d'arrêter l'exécution et que le flux de contrôle peut revenir à l'environnement d'exécution du nœud, permettant à d'autres choses.
Node.js est souvent considéré comme un cadre de programmation réseau car il est conçu pour gérer l'incertitude dans les flux de données du réseau. Ce qui contribue à ces conceptions, ce sont les boucles d'événements et l'utilisation des rappels, et ils sont comme des programmeurs qui peuvent écrire du code asynchrone qui répond aux événements du réseau ou des E / S.
Les règles à suivre sont: la fonction doit revenir rapidement, la fonction ne doit pas être bloquée et les opérations de longue durée doivent être déplacées vers un autre processus.
Ce qui ne convient pas à Node.js comprend le traitement de grandes quantités de données ou des calculs en cours d'exécution pendant longtemps. Node.js est conçu pour pousser les données sur le réseau et le compléter instantanément.