Maison >interface Web >Questions et réponses frontales >Est-ce que nodejs est js ?
nodejs n'est pas js, mais une plateforme qui permet à js de s'exécuter sur le serveur. js (nom complet JavaScript) est un langage de programmation et Node est un environnement d'exécution JavaScript basé sur le moteur Chrome V8, une plate-forme de développement qui permet à JavaScript de s'exécuter sur le serveur.
L'environnement d'exploitation de ce tutoriel : système windows7, nodejs version 12.19.0, ordinateur DELL G3.
nodejs n'est pas js, mais une plateforme qui permet à js de s'exécuter sur le serveur.
Node.js a été publié en mai 2009 et développé par Ryan Dahl. Il s'agit d'un environnement d'exécution JavaScript basé sur le moteur Chrome V8. Il utilise un modèle d'E/S non bloquant et piloté par les événements pour permettre à JavaScript de s'exécuter sur le moteur Chrome V8. plate-forme de développement côté serveur, qui fait de JavaScript un langage de script comparable aux langages côté serveur tels que PHP, Python, Perl et Ruby.
JavaScript peut effectuer une programmation côté serveur basée sur la technologie Node.js.
Caractéristiques de Node.js
IO asynchrone non bloquant
Par exemple, lors de l'accès à la base de données pour obtenir des données, cela prend un certain temps. Dans le mécanisme de traitement traditionnel à thread unique, après avoir exécuté le code pour accéder à la base de données, le thread entier fera une pause et attendra que la base de données renvoie le résultat avant d'exécuter le code suivant. En d’autres termes, les E/S bloquent l’exécution du code, réduisant considérablement l’efficacité d’exécution du programme.
En raison du mécanisme d'E/S non bloquant utilisé dans Node.js, une fois le code qui accède à la base de données exécuté, le code derrière celui-ci sera exécuté immédiatement et le code de traitement pour le résultat de retour de la base de données est placé dans le fonction de rappel. Améliorant ainsi l’efficacité d’exécution du programme.
Lorsqu'une E/S est terminée, le thread effectuant l'opération d'E/S sera notifié sous la forme d'un événement, et le thread exécutera la fonction de rappel de cet événement. Afin de gérer les E/S asynchrones, le thread doit disposer d'une boucle d'événements, vérifiant en permanence s'il existe des événements non gérés et les traitant à leur tour.
En mode blocage, un thread ne peut gérer qu'une seule tâche. Pour améliorer le débit, le multithread doit être utilisé. En mode non bloquant, un thread effectue toujours des opérations de calcul et l'utilisation du cœur du processeur de ce thread est toujours de 100 %. Il s’agit donc d’une solution particulièrement philosophique : plutôt que de laisser de nombreuses personnes inactives, il vaut mieux qu’une seule personne risque sa vie et travaille à mort.
Monothread
Dans les langages côté serveur tels que Java, PHP ou .net, un nouveau thread est créé pour chaque connexion client. Chaque thread nécessite environ 2 Mo de mémoire. En d’autres termes, en théorie, le nombre maximum d’utilisateurs pouvant être connectés simultanément à un serveur doté de 8 Go de mémoire est d’environ 4 000. Pour qu'une application Web puisse prendre en charge davantage d'utilisateurs, le nombre de serveurs doit être augmenté, ce qui entraînera bien sûr une augmentation du coût matériel de l'application Web.
Node.js ne crée pas de nouveau thread pour chaque connexion client, mais n'utilise qu'un seul thread. Lorsqu'un utilisateur se connecte, un événement interne est déclenché Grâce à des mécanismes d'E/S non bloquants et basés sur les événements, le programme Node.js est macroscopiquement parallèle. Grâce à Node.js, un serveur doté de 8 Go de mémoire peut gérer plus de 40 000 connexions utilisateur simultanément.
De plus, les avantages apportés par le thread unique sont que le système d'exploitation n'a plus le temps nécessaire à la création et à la destruction des threads. Cependant, le monothreading présente également de nombreux inconvénients, qui seront expliqués en détail dans les inconvénients de Node.js, veuillez continuer à lire.
Event-driven
Dans Node, lorsque le client demande à établir une connexion, à soumettre des données, etc., les événements correspondants seront déclenchés. Dans Node, une seule fonction de rappel d'événement peut être exécutée à la fois, mais au milieu de l'exécution d'une fonction de rappel d'événement, d'autres événements se produisent et d'autres événements peuvent être traités à la place (par exemple, un nouvel utilisateur se connecte), puis retournez la fonction de rappel qui continue d'exécuter l'événement d'origine. Ce mécanisme de traitement est appelé mécanisme de « boucle d'événement ».
La couche inférieure de Node.js est C++ (la V8 est également écrite en C++). Près de la moitié du code sous-jacent est utilisé pour la construction de files d'attente d'événements et de files d'attente de fonctions de rappel. Utiliser la planification événementielle pour terminer la planification des tâches du serveur est une chose à laquelle seul un génie peut penser. La danse sur la pointe de l'aiguille, à l'aide d'un fil, se donne pour mission de gérer de nombreuses tâches.
Faites attention à la boucle d'événements ici, qui peut également être considérée comme l'essence de Node.js. Ce qui suit est une citation du site officiel de Node.js
┌───────────────────────────┐ ┌─>│ timers │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ pending callbacks │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ idle, prepare │ │ └─────────────┬─────────────┘ ┌───────────────┐ │ ┌─────────────┴─────────────┐ │ incoming: │ │ │ poll │<─────┤ connections, │ │ └─────────────┬─────────────┘ │ data, etc. │ │ ┌─────────────┴─────────────┐ └───────────────┘ │ │ check │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ └──┤ close callbacks │ └───────────────────────────┘
Citation du site officiel de Node :
.Remarque : chaque case sera appelée "phases" de la boucle événementielle.
Chaque étape a une file d'attente FIFO de rappels à exécuter. Bien que chaque étape soit spéciale à sa manière, généralement lorsque la boucle d'événements entre dans une étape donnée, elle effectuera toutes les opérations spécifiques à cette étape, puis exécutera des rappels sur la file d'attente de cette étape jusqu'à ce que la file d'attente soit épuisée ou que le nombre maximum de rappels soit atteint. été exécuté. Lorsque la file d'attente est épuisée ou que la limite de rappel est atteinte, la boucle d'événements passe à la phase suivante, et ainsi de suite.
À propos de la boucle d'événements est un point essentiel. Les enquêteurs posent souvent des questions sur des résultats d'exécution spécifiques. Vous pouvez lire mon article
Multiplateforme
.Au départ, Node ne peut fonctionner que sur la plateforme Linux. Plus tard, avec le développement de Node, Microsoft a remarqué son existence et a investi une équipe pour aider Node à atteindre la compatibilité avec la plateforme Windows. Lorsque la version v0.6.0 est sortie, Node pouvait déjà fonctionner directement sur la plateforme Windows. Node est multiplateforme basé sur libuv.
Inconvénients de Node.js
Inconvénients du monothreading
Une fonctionnalité de Node.js est le monothreading, qui apporte de nombreux avantages, mais il présente également des inconvénients. sont les suivants.
Impossible d'utiliser le processeur multicœur
L'erreur entraînera la fermeture de l'ensemble de l'application et ne pourra pas continuer à appeler des E/S asynchrones
Une grande quantité de calculs occupent le processeur, ce qui rend impossible continuez à appeler des E/S asynchrones
Node.js Les scénarios d'application
présente les caractéristiques et les inconvénients de Node.js, puis parle des scénarios d'application de Node.js.
Quels types d'applications Node.js est-il adapté au développement ?
Bon en E/S, pas bon en calcul. Parce que Node.js est le meilleur en matière de planification de tâches, si votre entreprise a beaucoup de calculs de CPU, cela signifie en fait que ce calcul bloque ce thread unique, ce qui ne convient pas au développement de Node, mais ce n'est pas sans solutions, en disant simplement Pas tout à fait approprié.
Node.js est très adapté lorsque l'application doit gérer une grande quantité d'E/S simultanées et ne nécessite pas de traitement très complexe au sein de l'application avant d'envoyer une réponse au client. Node.js est également très adapté pour travailler avec des sockets Web afin de développer des applications interactives en temps réel avec de longues connexions.
Les scénarios spécifiques peuvent être exprimés comme suit :
La première catégorie : système de collecte de formulaires utilisateur, système de gestion d'arrière-plan, système d'interaction en temps réel, système d'examen, logiciel de mise en réseau, applications Web à haute concurrence ; La deuxième catégorie : les jeux en ligne multijoueurs basés sur le Web, le canevas, etc. ; La troisième catégorie : les clients de chat en temps réel multijoueurs basés sur le Web, les salons de discussion, les diffusions graphiques et textuelles en direct ;
Yahoo ; : Yahoo a ouvert le framework Cooktail, étendant les capacités du framework frontal YUI3 côté serveur avec l'aide de Node.
Tencent : appliquez Node aux connexions longues pour fournir des fonctionnalités en temps réel.
Huaban.com, Mogujie : notifications en temps réel via socket.io.
"]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!