Je suis récemment allé dans une nouvelle entreprise et j'ai récupéré le backend que j'avais laissé derrière moi depuis longtemps. Cependant, en raison des besoins de l'entreprise, le backend utilise . Nodejs, j'ai récemment appris Node.js Au fur et à mesure que j'approfondissais ma compréhension, j'ai découvert qu'il y avait une raison pour laquelle Node.js. peut devenir de plus en plus populaire. C’est logique. Certaines personnes diront peut-être que Java a toujours été le principal langage back-end, alors pourquoi devrions-nous apprendre Node.js ? Node.jsQu'est-ce que c'est exactement ? S'agit-il d'un nouveau langage ou d'un nouveau framework, d'un nouvel outil ou simplement d'un simple fichier JavaScript ?
Recommandations associées : "Tutoriel Nodejs"
Environnement d'exécution
Nous connaissons tous JavaPossède un environnement d'exécution appelé JRE pour permettre aux programmes Java de fonctionner correctement. JRE possède une machine virtuelle appelée JVM. JVM possède de nombreux composants tels que le garbage collector (GC), le compilateur juste à temps (JIT), l'interpréteur, le chargeur de classe, le gestionnaire de threads, le processeur d'exceptions , utilisé pour effectuer différentes tâches à différents moments. JRE dispose également d'une série de bibliothèques pour faciliter l'exécution des programmes Java.
Pourquoi impliquons-nous soudainement l'environnement d'exécution JRE ? En fait, il s'agit de comparer avec Node, ce n'est pas un langage, ni un framework, ni un outil. Il s'agit d'exécuter des applications JavaScript. .environnement d'exécution. Node.js possède une machine virtuelle appelée JavaScript Virtual Machine. Il génère du code machine pour les applications basées sur JavaScript afin de l'activer sur différentes plates-formes. Cette machine virtuelle est le moteur V8 de Google et possède également des composants majeurs, tels que JIT et GC, qui sont utilisés respectivement pour l'exécution des tâches, la compilation du runtime et la gestion de la mémoire.
Potentiel de développement
Juger du potentiel de développement de Java et de Node peut be En regardant la communauté écologique et les bibliothèques de soutien qui la soutiennent, cependant, le système traditionnel avec Java comme noyau n'est naturellement pas aussi bon que les nouvelles forces comme Node En bref, Java est mature et volumineux, et Node est rapide et actif.
Java Inutile de dire sur sa fonctionnalité et son aspect pratique, mais Java contient une grande quantité d'exemples de code, ce qui perturbe l'intention du programmeur. spring, l'un des trois frameworks majeurs de Java, lorsque les programmeurs utilisent spring, servlet, la persistance des données et les composants qui font mettre en place le système Les éléments sous-jacents, le framework spring a été encapsulé et vous aidera à tout gérer. Nous n'avons qu'à nous concentrer sur l'écriture du code de la couche métier.
Mais auSpring, les sous-systèmes sont construits les uns après les autres, et même si vous faites la moindre erreur, cela vous punira avec des exceptions qui vous feront planter. Vous pouvez voir un énorme message d’exception immédiatement après. Il contient des méthodes encapsulées que vous ne connaissez même pas. Spring a fait beaucoup de travail pour implémenter les fonctions du code.
Ce niveau d'abstraction nécessite évidemment beaucoup de logique, et un long message d'exception n'est pas forcément une mauvaise chose, il pointe vers un symptôme : quelle quantité de surcharge supplémentaire en mémoire et en performances cela nécessite-t-il ? Commentspring s'exécute-t-il ? Le framework doit analyser les noms de méthodes, deviner l'intention du programmeur, construire quelque chose comme un arbre de syntaxe abstraite, générer SQL, etc.
Combien de coûts supplémentaires ces choses coûteront-elles ? Par conséquent, utiliserJava pour masquer la complexité ne la simplifiera pas, cela ne fera que rendre le système plus complexe. JavaUne vérification de type stricte permet à Java de vous aider à éviter de nombreux types de bugs, car un mauvais code ne peut pas être compilé.
L'inconvénient du typage fort de Java est trop de code passe-partout. Les programmeurs doivent constamment effectuer des conversions de types. Ils doivent passer plus de temps à écrire du code précis et utiliser davantage de code passe-partout afin de détecter et de corriger les erreurs plus tôt.
Et Node.js est exactement le contraire. Les threads mènent à des systèmes plus complexes. Ainsi, Node.js adopte un système léger à thread unique et utilise la fonction anonyme de js pour le rappel asynchrone. Il vous suffit d'utiliser simplement la fonction anonyme, qui est une fermeture. Il n'est pas nécessaire de rechercher la bonne interface abstraite, il suffit d'écrire le code métier sans aucune redondance. C'est le plus grand avantage de l'utilisation de Node.js, mais les rappels asynchrones présentent naturellement un problème qui doit être résolu : Callback Trap.
Dans Node.js, lorsque nous continuons à imbriquer des fonctions de rappel, il est facile de tomber dans le piège des fonctions de rappel. Chaque couche d'imbrication rendra le code plus complexe, rendant la gestion des erreurs et le résultat. traitement Plus difficile. Un problème connexe est que le langage JavaScript n’aide pas les programmeurs à exprimer de manière appropriée l’exécution asynchrone. En fait, certaines bibliothèques utilisent Promise pour simplifier les opérations asynchrones, mais il semble que nous ayons simplifié le problème, mais en fait le niveau de code est plus compliqué Promise utilise beaucoup de passe-partout. code. Dissimuler les véritables intentions du programmeur.
Plus tard, Node.js prend en charge ES5 et ES6, et la fonction de rappel peut être réécrite à l'aide de async/await fonction. C'est toujours la même structure asynchrone, mais écrite en utilisant une structure de boucle normale. La gestion des erreurs et des résultats est également placée à un endroit naturel, le code est plus facile à comprendre, plus facile à écrire et l'intention du programmeur peut être facilement comprise. Les pièges de rappel ne sont pas résolus en masquant la complexité.
Au lieu de cela, les changements de langage et de paradigme résolvent le problème des pièges de rappel tout en résolvant également le problème de la trop grande quantité de code passe-partout. Avec la fonction async, le code devient plus beau. Une solution simple qui transforme les défauts de Node.js en avantages. Mais JavaScript est typé de manière très lâche. Et aucune erreur ne sera signalée lorsque vous écrivez du code, de nombreux types n'ont pas besoin d'être définis et il n'est généralement pas nécessaire d'utiliser la conversion de type.
Le code est donc plus clair et plus facile à lire, mais il y a un risque de manquer des erreurs de codage. Ce n'est que lors de la compilation que votre grammaire et votre logique seront vérifiées pour détecter tout problème, donc dans Node.js. Afin de mieux déboguer le BUG, Node prend en charge la division du programme en différents modules. En raison de l'existence de modules, la portée de l'erreur est réduite à une certaine plage, de sorte que<. les modules>Node.js sont plus faciles à tester.
Gestion des packages
L'un des problèmes les plus importants de Java est qu'il n'existe pas de système de gestion de packages unifié. Certaines personnes peuvent me parler de Maven. Mais en termes d'objectif, de facilité d'utilisation et de fonctionnalités, Maven est complètement différent du système de gestion de packages de Node.js.
npm est l'outil de gestion de packages officiellement fourni par Node.js Il est devenu la plateforme de version standard pour les packages Node.js. Utilisez le contrôle de publication, de propagation et de dépendance des packages Node.js. npm fournit des outils de ligne de commande qui vous permettent de télécharger, d'installer, de mettre à niveau et de supprimer facilement des packages. Il vous permet également de publier et de maintenir des packages en tant que développeur.
Le meilleur, c'est que la base de codenpm n'est pas seulement utilisée par Node.js mais aussi par les ingénieurs front-end. Toutes les bibliothèques JavaScript frontales existent sous forme de packages npm. De nombreux outils front-end tels que Webpack sont écrits en Node.js.
Performance
JavaUtilisezHotSpot cette super machine virtuelle, qui utilise plusieurs mots stratégie de compilation de sections. Il détecte le code qui est exécuté fréquemment, et plus un morceau de code est exécuté de fois, plus il appliquera d'optimisations. Par conséquent, les performances de HotSpot sont relativement plus rapides. La couche inférieure de
Node est implémentée à l'aide des moteurs c++ et v8, ainsi que du mécanisme événementiel de Node. js Cela signifie que face à des requêtes http à grande échelle, Node.js est piloté par les événements, il n'y a donc pas lieu de s'inquiéter de la partie performance, et c'est excellent. Et, grâce aux améliorations apportées au moteur V8, chaque version de Node.js apportera d'énormes améliorations de performances.
Bien que Node ait des performances extrêmement élevées pour les applications à haute concurrence, Node.js a également ses propres défauts :Node n'est pas adaptéCPU applications intensives, car si les applications CPU ont des opérations à long terme, ce n'est pas aussi bon qu'une grande boucle, ce qui entraînera la tranche de temps CPU ne pas être libéré, ce qui fait que les opérations IO ultérieures sont toutes suspendues.
Node ne prend en charge que le CPU monocœur et ne peut pas utiliser pleinement les ressources CPU.
Node utilise une seule entrée<.>
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!