Maison  >  Article  >  interface Web  >  Tutoriel Node.js pour débutants (1)

Tutoriel Node.js pour débutants (1)

php中世界最好的语言
php中世界最好的语言original
2018-03-12 17:17:001756parcourir

Cette fois je vous propose un tutoriel novice sur Node.js Quelles sont les précautions d'utilisation de Node.js Ce qui suit est un cas pratique, jetons un coup d'œil.

Ligne principale : Qu'est-ce que Node.js--> La composition de Node.js--> Caractéristiques de Node.js--> -- > Module local--> Package--> Gestionnaire de packages--> Non bloquant, monothread, piloté par événement-->

Qu'est-ce que Node ? Regardez d'abord son nom, Node.js. À première vue, certaines personnes pensent que cette chose peut être une bibliothèque ou un framework comme jQuery, mais en fait, ce n'est pas le cas. Node.js est une plate-forme qui permet à JavaScript de s'exécuter sur le serveur. , ou Node.js est un outil qui permet à JavaScript de s'exécuter dans un environnement sans navigateur. Node.js utilise ce qui est connu comme le moteur Chrome v8 le plus rapide au monde. Il est composé de deux parties, dont Core JavaScript et Node Composed of. Dans la bibliothèque standard, Core JavaScript fait en fait référence à ECMAScript, ce qui signifie qu'il inclut uniquement l'ECMAScript dans nos scripts js côté navigateur, à l'exclusion de notre modèle objet de document, qui est DOM, et du modèle objet du navigateur, qui est BOM. ce Node a des problèmes de compatibilité ? Il n'y a pas de problème de compatibilité avec Node, car nous avons étudié le script js du navigateur client et nous devons comprendre que le problème de compatibilité js dont nous parlons souvent fait en fait référence au problème de compatibilité de notre DOM et BOM, alors qu'est-ce que la bibliothèque standard Node , ceci est similaire à notre bibliothèque standard C ou à notre bibliothèque d'extension standard C++. La caractéristique de Node.js est basée sur des événements asynchrones non bloquants, ce qui permet à notre JavaScript d'être intégré dans notre monde de script. regardez d'abord le premier exemple, helloworld. Ce helloworld semble être plus compliqué que les autres langages ? Mais nous pouvons jeter un œil aux fonctions implémentées par ces 6 lignes de code. Il implémente un serveur simple. L'un des piliers de Node.js est le module, donc la première chose que nous devons apprendre est le module. un module ? Un module est en fait un fichier js. Dans notre navigateur client, si nous voulons intégrer un fichier css et introduire un autre fichier css, nous pouvons utiliser la directive @import, mais dans notre js, si nous voulons introduire un autre fichier css js, ce n'est pas si simple. Bien sûr, cela ne signifie pas que cela ne peut pas être réalisé. Nous pouvons créer une balise de script via createElement puis appendChild à notre code HTML. Cependant, quoi qu'il en soit, ce n'est pas si simple à mettre en œuvre. notre Node a résolu ce problème. Dans notre Node, un fichier js est directement un module. Nous avons créé deux fichiers js, alors comment pouvons-nous introduire un autre fichier js dans un fichier js ? Nous pouvons l'introduire via une fonction appelée require. Nous pouvons traiter chaque module comme un objet plus grand. Ils finiront par exposer certaines propriétés et méthodes. Nous le faisons via une fonction appelée exports, ou module.exports. divisé en deux types. L'un est le module de base. Les modules de base communs incluent le module http, le module os, qui est un module lié au système d'exploitation, et le module fs, qui est un module de système de fichiers qui traite et classe les opérations. , util module tools, et l'autre est le module local. Le module dit local signifie que nous pouvons créer notre propre module par nous-mêmes. Par rapport au module, une unité plus grande est le package. Nous pouvons y penser, nous pouvons considérer un module comme l'un de nos fichiers, et nous pouvons considérer le package comme un dossier, ce qui signifie que nous pouvons utiliser un dossier pour regrouper un ensemble de fichiers avec des fonctions similaires et les empaqueter. En ce qui concerne les packages, en plus des packages que nous créons nous-mêmes, ce qui est plus important sont certains packages tiers. Sur le site npm.org, il existe un grand nombre de packages tiers qui ont été implémentés par des dizaines de personnes. des milliers de personnes. Nous voulons l’utiliser, comment l’utiliser concrètement ?Afin de faciliter l'utilisation de packages tiers, notre Node a développé un outil appelé outil de gestion de packages, qui est notre npm. Nous pouvons simplement jeter un œil à la façon d'utiliser cette chose. Nous avons deux façons de le faire. installez-le. L'un est une installation globale et l'autre est une installation locale. Cela peut ne pas être exactement la même chose que les autres langages. Par exemple, comme Python et Ruby, les packages installés globalement conviennent généralement aux opérations en ligne de commande. notre lessc, un autre package local est généralement utilisé dans certains projets sur lesquels nous travaillons actuellement. Bien sûr, s'il n'a que ces éléments, alors Node.js n'a pas de grandes fonctionnalités, car ces éléments sont en fait déjà disponibles dans d'autres langues. Comme Python et Ruby. Eh bien, la plus grande fonctionnalité de Node.js est en fait les modules asynchrones non bloquants et de programmation d'événements. Cela devrait être une conception complètement subversive, qui est très différente des autres langages. deux exemples. J'espère que tout le monde pourra comprendre cet exemple. , en supposant que ce que nous implémentons est une IO synchrone et que ce que nous voulons interroger est une instruction SQL. Habituellement, nous écrirons le code suivant, tel que python, tel que php. le tout sous cette forme, c'est-à-dire que vous utilisez d'abord db.query, puis une requête SQL se bloquera et attendra que la base de données renvoie les résultats et les stocke dans une variable res, mais ce qui suit est la véritable façon d'écrire Node. IO asynchrone. On peut voir qu'en fait, cette instruction, En fait, c'est une instruction. Elle génère une telle requête SQL et met une fonction dans le deuxième paramètre. Cette fonction est appelée une fonction de rappel, ce qui signifie qu'après le. L'instruction est exécutée, elle ne sera pas exécutée directement. res.auto, elle continuera à s'exécuter à l'envers. Quand le contenu à l'intérieur sera-t-il exécuté ? Attendez que ma base de données renvoie le message, puis entrez la fonction de rappel via la boucle d'événements, puis imprimez les résultats de la requête. C'est le mode IO asynchrone. Ensuite, j'expliquerai ce qu'est la synchronisation et ce qui est asynchrone, et le programme s'exécute. IO L'opération peut prendre beaucoup de temps, qui peut durer des centaines de milliers ou des centaines de millions de cycles d'instructions, mais cela peut ne prendre que des centaines ou des milliers de cycles d'instructions pour exécuter une instruction JavaScript. Bien sûr, elle peut être optimisée. Peut-être que seulement quelques dizaines sont nécessaires, c'est donc une perte de temps après avoir rencontré des IO. Le système d'exploitation et le processeur implémentent des méthodes de planification asynchrone via des interruptions, ce qui signifie que lorsque le processus lance une demande d'IO, le système d'exploitation se bloque. processus, puis donne le contrôle du CPU à d'autres processus. Lorsque l'IO est terminée, le système d'exploitation reprendra le processus d'origine et poursuivra l'exécution. En même temps, vous pouvez accéder aux résultats de l'opération IO à l'instant. La méthode est appelée Il s'agit d'une IO synchrone, ou d'une IO bloquante, mais en mode IO dans Node, nous utilisons une IO asynchrone, ou une IO non bloquante. Cela signifie qu'une fois que le processus a lancé une requête IO, il revient immédiatement et continue d'en exécuter d'autres. tâches. Instruction, puis utilisez d'autres moyens pour notifier que l'opération IO est terminée, puis traitez le code logique une fois l'opération IO terminée. Ensuite, lorsque l'IO non bloquante est lancée, le processus n'entrera pas dans l'état de blocage. mais continuera à exécuter l'événement.D'autres parties, puis entrera dans la boucle d'événements pour gérer d'autres événements. Le concept d'événement et de boucle d'événements est mentionné ici.Toutes les opérations logiques de calcul dans Node seront résumées dans un événement. le programme entier est une boucle d'événements, et la boucle d'événements continuera à traiter ce qu'on appelle une file d'attente d'événements, c'est-à-dire que j'ai un événement au début, puis certaines requêtes peuvent être initiées pendant le processus d'exécution, comme les requêtes IO. Une fois la demande d'E/S terminée, la file d'attente des événements sera ajoutée à la file d'attente des événements. Attendez que le processus entre dans la boucle d'événements avant le traitement. Il s'agit d'un mode de traitement basé sur la boucle d'événements. Mode classique et couramment utilisé, comme qt, gtk. Par exemple, un clic de souris est un événement. Par exemple, une minuterie est également un événement, et un événement nécessite une fonction de rappel. La fonction dite de rappel fait référence au moment où notre événement. Cela se produit alors pourquoi Node utilise-t-il ce modèle de programmation obscur ?En fait, il s'agit d'une autre stratégie très particulière de Node. Elle utilise le mode monothread. Parlons d'abord du modèle de concurrence en mode blocage. Par exemple, si nous voulons développer un serveur Web, il doit bien sûr avoir des exigences de concurrence. Cela peut permettre l'accès à plusieurs utilisateurs en même temps. Cela ne signifie pas que j'ai traité la demande d'un utilisateur puis que j'ai traité la demande du deuxième utilisateur. Dans ce cas, lorsqu'il y a plus d'utilisateurs, la vitesse de traitement sera très lente. L'utilisateur est très lent et ne se déconnecte pas, les autres utilisateurs continueront d'attendre, ce qui est déraisonnable. Pour obtenir la concurrence en mode blocage, il faut utiliser plusieurs threads, c'est-à-dire qu'un seul processus ne peut gérer qu'une seule tâche. le débit du CPU, Ce qui doit être utilisé est le multithread, qui peut être bien supérieur au nombre de cœurs du CPU. Combien de threads supplémentaires sont nécessaires. Par exemple, une de nos logiques doit en calculer une partie. il d'abord, puis lancez une requête d'E/S, comme la lecture d'un fichier ou l'écriture d'un fichier, ou le lancement d'une requête réseau, puis entrez dans notre deuxième partie de calcul. Pour obtenir la concurrence, nous pouvons utiliser le mode multi-thread, et son exécution peut être One. Dans cet exemple, en supposant que nous ayons un seul processeur, le premier thread s'empare d'abord du processeur pour le calcul, puis il atteint l'étape de demande d'E/S et devient bloqué. À ce moment, le contrôle du processeur sera transféré, puis à ce moment-là. time Le deuxième thread saisira le CPU, puis entrera dans IO, sera à nouveau bloqué, puis libérera le contrôle du CPU, du thread 3, du thread 4, du thread 5, etc., puis il peut y avoir une période d'inactivité au milieu , puis attendez le thread 1 L'IO est terminé, puis il constate que le CPU n'est pas occupé, il utilisera le CPU pour entrer dans les calculs, comme un mode préemptif concurrent basé sur le calcul et l'IO, mais sous le modèle non bloquant , son modèle sera comme ceci, un calcul 1 monothread lancera une requête IO asynchrone. À ce moment, il entrera directement un autre calcul 1, qui peut être le calcul 1 initié par un autre utilisateur, puis lancera une deuxième requête. , puis attendez 5 utilisateurs. Une fois le lancement terminé, le calcul du premier utilisateur est terminé à ce moment-là, puis notre boucle d'événements est un seul thread qui exécutera la requête IO initiée par le premier utilisateur. l'utilisation du CPU par le processus en mode non bloquant est de 100 %. C'est une situation idéale. Un seul thread peut atteindre le débit maximum sans plusieurs threads. Alors, quand avez-vous besoin de plusieurs threads ? Lorsque nous avons plusieurs cœurs, par exemple, si nous avons 2 cœurs, nous ouvrirons 2 threads. Alors, quel est l'avantage du non-blocage par rapport au blocage ? Le multithreading semble rapide, mais en fait ce n'est pas si rapide. En raison de la commutation, la segmentation des tranches de temps sera très petite. Changer de station toutes les 20 ms est très inefficace dans l'utilisation du cache CPU, et le non-blocage n'est pas très. bien non plus. Oui, cela provoquera facilement un enfer de rappel. Lisez d'abord le premier fichier, puis lisez le deuxième fichier. Il s'agit d'une opération mongoDB. Je viens de vous présenter ici les bases de Node. Après avoir longuement parlé de Node, quelles sont les applications de Node ? Tout d'abord, Node dispose de nombreux modules tiers. Par exemple, si nous voulons créer un site Web, nous pouvons utiliser le framework express. Ensuite, nous pouvons utiliser un moteur de modèles appelé jade pour générer du HTML. générer du CSS, et il existe des outils de compression javascript. uglify, en utilisant websocket a socket.io, la base de données SQL a ORM, oAuth, processus démon, analyse de ligne de commande, analyse syntaxique, y compris Node.js. il peut en fait gérer le téléchargement de fichiers, la mise en évidence de la syntaxe, l'analyse des démarques, le traitement des images de conversion d'encodage, les threads et coroutines légers, le coffeescript et une analyse statique du côté du navigateur. Merci à tous. C'est mon introduction à Node.js aujourd'hui.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Le principe d'exécution du code Node.js

Explication détaillée de l'utilisation de $apply( ) dans angulairejs

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn