Jetons d'abord un œil à l'introduction sur le site officiel de Nodejs:
Ses caractéristiques sont:
1. C'est un environnement de course JavaScript
2. Comptez sur le moteur Chrome V8 pour l'explication du code
3.
4. E / S non bloquant
5. Léger, évolutif, adapté aux applications d'interaction de données en temps réel
6. Processus unique, thread unique
(1), Pourquoi les nodejs choisissent-ils JavaScript comme langue de transporteur
En fait, au début de la mise en œuvre de Node.js, l'auteur Ryan Dahl n'a pas choisi JavaScript. Il a essayé C et Lua, car il manquait de caractéristiques linguistiques de haut niveau, telles que les fermetures et la programmation fonctionnelle, ce qui a rendu le programme compliqué et difficile à entretenir.
JavaScript est un langage qui prend en charge le paradigme de programmation fonctionnelle, qui correspond bien au modèle de programmation piloté par les événements de Node.js. De plus, le moteur V8 fourni par Google a considérablement amélioré la vitesse d'exécution de la langue JavaScript.
Ce qui nous est enfin présenté, ce sont Node.js, pas Node.c, Node.lua ou d'autres implémentations de langue.
(2) Node.js n'est pas une application JS, mais une plate-forme de fonctionnement JS
Lorsque vous voyez le nom Node.js, les débutants peuvent penser à tort qu'il s'agit d'une application JavaScript. En fait, Node.js est écrit en C ++ et est un environnement de course JavaScript.
Node.js utilise le moteur V8 de Google Chrome, qui a de bonnes performances et fournit également de nombreuses API au niveau du système, telles que le fonctionnement des fichiers, la programmation réseau, etc.
Voici tous les modules impliqués dans NodeJS:
Le code JavaScript du côté du navigateur sera soumis à diverses restrictions de sécurité lors de l'exécution, et le fonctionnement du système client est limité.
En revanche, Node.js est un fonctionnement complet de l'arrière-plan, offrant à JavaScript de nombreuses fonctions que d'autres langues peuvent atteindre.
(3), fonctionnalités de Node.js
Node.js est également relativement innovant dans la conception. Il s'exécute en mode un seul processus et un seul thread (cela est cohérent avec la façon dont JavaScript exécute),
Le mécanisme motivé par des événements est mis en œuvre par Node.js via une maintenance efficace interne et efficace des files d'attente en boucle d'événements. Il n'y a pas d'occupation des ressources et de commutation de contexte de multi-threads. Cela signifie que face aux demandes HTTP à grande échelle, Node.js gère tout avec des événements.
Les développeurs de services Web qui sont habitués aux langues traditionnels peuvent être très familiers avec la concurrence et la collaboration multi-thread, mais face à Node.js, nous devons accepter et comprendre ses caractéristiques.
Deux concepts importants
1. Qu'est-ce que la boucle d'événement? (Un concept très important)
La boucle d'événements est un concept très important, faisant référence à un mécanisme de fonctionnement du système informatique.
Si vous souhaitez comprendre la boucle d'événements, vous devez commencer par le mode d'exécution du programme. Le programme après l'exécution est appelé processus. Généralement, un processus ne peut effectuer qu'une seule tâche à la fois.
S'il y a beaucoup de tâches à exécuter, il n'y a que trois solutions.
(1), alignez. Étant donné qu'un processus ne peut exécuter qu'une seule tâche à la fois, il doit attendre que la tâche précédente soit terminée avant d'exécuter la tâche suivante.
(2), créez un nouveau processus. Utilisez la commande Fork pour créer un nouveau processus pour chaque tâche.
(3), créez un nouveau fil. Étant donné que les processus consomment trop de ressources, les programmes d'aujourd'hui permettent souvent à un processus de contenir plusieurs threads et les threads terminent la tâche.
Prenons l'exemple du langage JavaScript. C'est une langue unique. Toutes les tâches sont effectuées sur un seul fil, c'est-à-dire que la première méthode ci-dessus est adoptée. Une fois que vous avez rencontré un grand nombre de tâches ou une tâche longue, la page Web connaîtra "Fake Death" car JavaScript ne peut pas s'arrêter et ne peut pas répondre au comportement de l'utilisateur.
Vous pouvez vous demander, pourquoi JavaScript est-il unique? Ne peut-il pas être mis en œuvre comme multi-thread?
Cela a quelque chose à voir avec l'histoire:
Une caractéristique majeure du langage JavaScript est le threading unique, ce qui signifie que vous ne pouvez faire qu'une seule chose en même temps. Alors, pourquoi JavaScript ne peut-il pas avoir plusieurs threads? Cela améliorera l'efficacité.
Le threading unique de JavaScript est lié à son objectif. En tant que langage de script de navigateur, le but principal de JavaScript est d'interagir avec les utilisateurs et d'exploiter DOM. Cela détermine qu'il ne peut être qu'un seul thread, sinon il entraînera des problèmes de synchronisation très complexes.
Par exemple, Supposons que JavaScript ait deux threads en même temps, un thread ajoute du contenu sur un certain nœud DOM, et l'autre thread supprime ce nœud, quel thread le navigateur devrait-il prendre en ce moment?
Par conséquent, afin d'éviter la complexité, JavaScript est un seul fil de sa naissance, qui est devenu la caractéristique centrale de cette langue et ne changera pas à l'avenir.
Afin d'utiliser la puissance de calcul des CPU multi-core, HTML5 a proposé la norme du travailleur Web, permettant aux scripts JavaScript de créer plusieurs threads, mais les threads enfants sont complètement contrôlés par le thread principal et ne peuvent pas utiliser le DOM.
Par conséquent, cette nouvelle norme ne modifie pas la nature du threading unique JavaScript.
Retour à Eventloop:
Le threading unique signifie que toutes les tâches doivent être en file d'attente et que la tâche précédente sera exécutée avant que la prochaine tâche ne soit exécutée. Si la tâche précédente prend beaucoup de temps, la prochaine tâche doit attendre.
Si la file d'attente est due à la grande quantité de calcul et que le CPU est trop occupé, ce serait bien, mais plusieurs fois, le CPU est inactif car le périphérique IO (périphérique d'entrée et de sortie) est très lent (comme l'opération Ajax lit les données du réseau), et que vous devez attendre le résultat à sortir avant de les exécuter.
Le concepteur de la langue JavaScript s'est rendu compte qu'à ce moment, le fil principal peut ignorer complètement l'appareil IO, suspendre les tâches d'attente et exécuter les tâches suivantes en premier. Attendez que le périphérique IO renvoie le résultat, puis retournez et continuez la tâche suspendue.
Par conséquent, toutes les tâches peuvent être divisées en deux types, l'une est une tâche synchrone et l'autre est une tâche asynchrone. Les tâches synchrones se réfèrent aux tâches en file d'attente sur le thread principal, seule la tâche précédente a été exécutée.
Cette dernière tâche peut être exécutée; Une tâche asynchrone fait référence à une tâche qui n'entre pas le thread principal mais entre dans la "file d'attente des tâches". Ce n'est que lorsque la "file d'attente de tâche" informe le thread principal qu'une tâche asynchrone peut être exécutée que la tâche entrera le thread principal pour l'exécution.
Comme indiqué dans la figure ci-dessous:
Tant que le thread principal est vide, il lira la "file d'attente des tâches". Il s'agit du mécanisme de course de JavaScript. Ce processus sera répété en continu.
3. Exemple d'explication
D'accord, ne disons pas grand-chose de «non-sens», commençons notre première application NodeJS: «Bonjour Big Bear» immédiatement.
Ouvrez votre éditeur préféré et créez un fichier helloworld.js .
Le code est le suivant:
La copie de code est la suivante: 1 var http = require ("http"); 2 http.createServer (fonction (request, réponse) {3 réponse.writehead (200, {4 "contenu-type": "text / plain" 5}); 6 réponse.write ("bonjour, big bear!"); 7 réponse.end (); 8}). Écouter (8888);
Exécutons et testons ce code. Tout d'abord, exécutez votre script avec node.js:
Ouvrez l'outil de ligne de commande cmd, passez à votre répertoire de travail et exécutez la commande "node helloworld.js"
Ensuite, ouvrez le navigateur et visitez http: // localhost: 8888 /, et vous verrez une page Web avec les mots "Hello, Big Bear!".
Un peu de connaissances prolongées:
Comme le montre la figure ci-dessous, cela fait partie du code source de Http.js dans NodeJS. CreateServer est une interface conviviale. La mise en œuvre interne adopte un modèle singleton. L'avantage est de séparer efficacement les tâches de création et d'initialisation des instances, de se concentrer sur les responsabilités et de réduire le couplage. C'est une idée dont tout le monde peut apprendre lors de la programmation.
Hahaha, n'est-ce pas très intéressant? Ce n'est qu'une courte expérience. J'expliquerai beaucoup de points de connaissance plus tard. Tout le monde peut lentement comprendre o (∩_∩) o haha ~
Iv. Aperçu global
1. C'est un environnement de course JavaScript
2. Comptez sur le moteur Chrome V8 pour l'explication du code
3.
4. E / S non bloquant
5. Léger, évolutif, adapté aux applications d'interaction de données en temps réel
6. Processus unique, thread unique
Enfin, ce que je veux dire, c'est: il n'y a pas beaucoup d'exemples dans cet article, mais ces concepts sont très importants. Vous devez avoir une compréhension claire, afin que vous jettez une base solide pour l'apprentissage futur NodeJS. Allez, travaillez dur ensemble.
Hahaha, cet article est terminé et ne se poursuivra pas. J'espère communiquer davantage avec vous et progresser ensemble. . . . . . Huhuhuhu… (* ^ __ ^ *)