Concepts de base
Node.js , ou Node, est une plate-forme qui permet à JavaScript d'exécuter le côté serveur. On peut dire que Node.js a été le pionnier du développement modulaire de javascript . Les premières exigences javascript étaient très simples, et elles ont été essentiellement écrites en fonction, suivies d'une écriture axée sur le processus. Plus tard, les idées de développement orientées objet ont été progressivement introduites, puis elles ont été lentement écrites dans les classes. Enfin, l'émergence de Node.js a commencé à avoir le concept de développement modulaire JS, qui a éliminé le code js gonflé tel que les conflits de dénomination et d'autres problèmes de développement.
La plus grande caractéristique Node est son adoption d' I/O asynchrones et de conception architecturale axée sur les événements. Node.js est une plate-forme qui permet à JS d'exécuter en dehors du navigateur. Son objectif initial est de mettre en œuvre des serveurs Web I/O non bloqués par des événements
Node.js est juste un environnement de fonctionnement JavaScript (ou un ensemble de bibliothèques), qui complète le js standard avec les fonctions de l'IO asynchrone, c'est-à-dire des réseaux et des fichiers de lecture et d'écriture.
En tant que bibliothèque, ce n'est rien de plus qu'une API Tune. En plus des rappels d'événements légèrement anti-humains, il n'est pas très différent des autres langages arrière (PHP, Python).
Node.js utilise un seul mode thread. Chaque thread complète une fonction. Un processus peut avoir plusieurs threads. Toutes les E / OS sont utilisées dans une méthode de demande asynchrone. Une fois chaque demande d'E / S asynchrone terminée, il sera poussé à la file d'attente d'événements et attendra que le processus de programme traite.
En bref, l'idée principale du node est: non bloquante, monocread et axée sur l'événement. (Synchrone correspond au blocage, asynchrone correspond au non-bloquant)
Diagramme d'architecture Node.JS
Simple
L'environnement d'exécution de la langue javascript est "thread unique".
Le soi-disant "thread unique" signifie qu'une seule tâche ne peut être terminée qu'à la fois. S'il y a plusieurs tâches, vous devez faire la queue, terminer la tâche précédente, exécuter la tâche suivante, etc.
L'avantage de ce modèle est qu'il est relativement simple à mettre en œuvre et que l'environnement d'exécution est relativement simple; L'inconvénient est que tant qu'il y a une tâche qui prend beaucoup de temps, les tâches suivantes doivent être mis en file d'attente, ce qui retardera l'exécution de l'ensemble du programme. Les navigateurs communs ne répondent pas souvent (faux décès) parce qu'un certain morceau de code Javascript s'exécute pendant longtemps (comme une boucle morte), ce qui a provoqué la fin de la page entière à cet endroit et d'autres tâches ne peuvent pas être exécutées.
Les goulots d'étranglement de la plupart des applications Web sont dans I/O , c'est-à-dire des disques de lecture et d'écriture, de lire et d'écrire des réseaux et de lire et d'écrire des bases de données. Quelle stratégie à utiliser pour attendre cette période est devenue le point clé pour améliorer les performances
Synchrone et asynchrone
Pour résoudre ce problème, Javascript divise le mode d'exécution des tâches en deux types: synchrone (synchrone) et asynchrone (asynchrone).
"Mode synchrone" est le mode de la section précédente. Cette dernière tâche attend que la tâche précédente se termine puis s'exécute. L'ordre d'exécution du programme est cohérent et synchrone avec l'ordre d'arrangement des tâches; Le "mode asynchrone" est complètement différent. Chaque tâche a une ou plusieurs fonctions de rappel ( callback ). Une fois la tâche précédente terminée, ce n'est pas la tâche suivante, mais la fonction de rappel est exécutée. Cette dernière tâche est exécutée sans attendre la fin de la tâche précédente, de sorte que l'ordre d'exécution du programme est incohérent et asynchrone avec l'ordre d'arrangement des tâches.
"Mode asynchrone" est très important. Du côté du navigateur, les opérations à long terme doivent être exécutées de manière asynchrone pour éviter que le navigateur ne perde une réponse. Le meilleur exemple est les opérations AJAX. Côté serveur, "Mode asynchrone" est même le seul mode, car l'environnement d'exécution est unique, si toutes les demandes http peuvent être exécutées de manière synchrone, les performances du serveur baisseront fortement et perdront bientôt sa réponse.
Processus et threads
Processus et threads dans le système Mac
D'après la figure, nous pouvons voir qu'un processus peut inclure plusieurs threads. Les processus sont comme des ateliers dans les projets. Les fils sont des travailleurs de cet atelier. Dans le système d'exploitation qui introduit des threads, ils utilisent généralement les processus comme unité de base pour allouer des ressources et les threads comme unité de base pour le fonctionnement indépendant et la planification indépendante. Étant donné que les threads sont plus petits que les processus et ne possèdent pas de ressources système, les frais généraux de planification seront beaucoup plus petits, ce qui peut améliorer plus efficacement le degré d'exécution simultanée entre plusieurs programmes du système.
la différence
La différence entre un thread et un processus est que le processus enfant et le processus parent ont des espaces de code et de données différents, tandis que plusieurs threads partagent des espaces de données, chaque thread a sa propre pile d'exécution et son compteur de programme pour son contexte d'exécution. Le multithreading est principalement utilisé pour gagner du temps CPU et l'utiliser en fonction de la situation spécifique. Les ressources de mémoire de l'ordinateur et le CPU doivent être utilisés lors de l'exécution d'un fil.
Modules et modules de package
Module: un fichier qui implémente certaines fonctions spécifiques pour implémenter la programmation modulaire. Introduire des modules via l'exigence (nom du module).
- Les fonctions dans les modules (telles que les variables, les fonctions) sont fournies à l'appelant en attribuant une propriété à l'objet exports .
Comment utiliser des modules?
Il est très pratique d'utiliser des modules dans le nœud. Dans le code JavaScript , vous pouvez directement utiliser la fonction globale require() pour charger un module. Par exemple, nous pouvons utiliser require("http") pour charger le module de serveur HTTP qui est livré avec node .
Sac
Package: Un package est un dossier qui résume les modules pour la version, la mise à jour, la gestion des dépendances et le contrôle de version. Décrire les informations du package via package.json: fichiers d'entrée, packages externes de dépendance, etc. Installez le package via la commande npm install et utilisez le package via require .
E / S asynchrones et axés sur l'événement
Le mécanisme asynchrone de Node.js est basé sur des événements. Chaque I/O est une demande. Toutes I/O de disque, la communication réseau et les requêtes de base de données sont demandées de manière non bloquante. Les résultats retournés sont traités par la boucle d'événement. Comme indiqué dans la figure ci-dessous:
Le processus Node.js ne traitera qu'un seul événement en même temps et entrera immédiatement la boucle d'événement pour vérifier et traiter les événements suivants après la fin. L'avantage de cela est que le processeur et la mémoire existent en même temps pour centraliser une chose tout en permettant à des opérations d'E / S longues à exécuter autant que possible en parallèle
Démarrer la programmation du nœud
Ici, je vous recommande d'utiliser webstorm pour node.js Development, qui est pratique et rapide, et est beaucoup plus facile à utiliser que CMD ou les terminaux sous Mac.
Quant à l'installation du nœud, veuillez vous-même Baidu. Je n'entrerai pas dans les détails ici. Jetons un coup d'œil à l'interface de programmation du nœud sous webstorm :
Nous avons juste besoin de cliquer avec le bouton droit sur l'interface de code de nœud écrit et de cliquer sur l'exécution, ce qui est pratique et rapide
Ce qui suit est l'interface de sortie du nœud:
Dans Mac , je recommande les trois outils que j'utilise: CODA2, WebStorm et Sublime Text3. Ce sont les meilleurs outils de développement que j'ai jusqu'à présent. Vous pourriez aussi bien essayer celui qui est le plus conforme à votre goût.
Pour le développement de nœuds dans webstorm , vous devez d'abord configurer certains fichiers. Tout le monde devrait utiliser Baidu pour le faire. Parce que mon webstorm a été configuré, je ne peux pas prendre de capture d'écran pour vous montrer les étapes. Les étapes générales sont: Sous le système Mac, cliquez d'abord sur webstorm dans la barre supérieure, puis cliquez sur perference , puis cliquez sur Node.js and NPM , puis cliquez sur Configurer sur le côté droit, et enfin il ressemblera à ce qui suit:
Les étapes du processus sous windows System sont à peu près similaires à ce processus. La version que j'utilise est 8.0.4.
Variables globales
Dans la programmation JS, il est préférable d'ajouter le mot-clé VAR à chaque variable pour éviter de polluer l'espace de noms global et d'augmenter le risque de couplage de code.
console
console est utilisée pour sortir des caractères dans la standout de sortie de sortie standard (STDOUT) et le flux d'erreur standard (STDERR).
console.log() imprime les caractères du flux de sortie standard et se termine par une nouvelle ligne, qui accepte plusieurs paramètres et sera sorti au format printf()
console.log(__dirname)输出文件目录Calculer l'heure d'exécution du code
console.time(label) console.timeEnd(label)Nous avons juste besoin de donner la même étiquette au début et à la fin, et de mettre tout code que vous souhaitez calculer le temps d'exécution au milieu.
__filename et __dirname
console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon