Question Comment décider quand utiliser Node.js?


Je suis nouveau dans ce genre de choses, mais dernièrement j'ai beaucoup entendu parler de la qualité Node.js est. Considérant combien j'aime travailler avec jQuery et JavaScript en général, je ne peux pas m'empêcher de me demander comment décider quand utiliser Node.js. L'application web que j'ai en tête est quelque chose comme Mordu - prend du contenu, l'archive.

De tous les devoirs que j'ai faits ces derniers jours, j'ai obtenu les informations suivantes. Node.js

  • est un outil de ligne de commande qui peut être exécuté en tant que serveur Web normal et permet d'exécuter des programmes JavaScript
  • utilise le grand Moteur JavaScript V8
  • est très bon quand vous devez faire plusieurs choses en même temps
  • est basé sur les événements donc tout le merveilleux Ajax-comme des choses peuvent être faites du côté du serveur
  • nous permet de partager du code entre le navigateur et le backend
  • nous permet de parler avec MySQL

Certaines des sources que j'ai rencontrées sont:

Considérant que Node.js peut être exécuté presque out-of-the-box sur EC2 d'Amazon instances, j'essaie de comprendre quel type de problèmes nécessitent Node.js par opposition à l'un des puissants rois là-bas comme PHP, Python et Rubis. Je comprends que cela dépend vraiment de l'expertise que l'on a sur une langue, mais ma question se situe plutôt dans la catégorie générale: Quand utiliser un cadre particulier et à quel type de problèmes est-il particulièrement adapté?


2200
2018-02-21 05:20


origine


Réponses:


Vous avez fait un excellent travail en résumant ce qui est génial à propos de Node.js. Mon sentiment est que Node.js est particulièrement adapté pour les applications où vous souhaitez maintenir une connexion persistante du navigateur vers le serveur. En utilisant une technique connue sous le nom "interrogation longue", vous pouvez écrire une application qui envoie des mises à jour à l'utilisateur en temps réel. Faire un long sondage sur de nombreux géants du web, comme Ruby sur Rails ou Django, créerait une charge immense sur le serveur, car chaque client actif mange un processus serveur. Cette situation équivaut à tarpit attaque. Lorsque vous utilisez quelque chose comme Node.js, le serveur n'a pas besoin de gérer des threads séparés pour chaque connexion ouverte.

Cela signifie que vous pouvez créer un application de conversation basée sur un navigateur dans Node.js cela ne prend presque aucune ressource système pour servir un grand nombre de clients. Node.js est une excellente option à chaque fois que vous voulez effectuer ce type d'interrogation longue.

Il vaut la peine de mentionner que Ruby et Python ont tous deux des outils pour faire ce genre de chose (eventmachine et tordu, respectivement), mais que Node.js le fait exceptionnellement bien, et de fond en comble. JavaScript est exceptionnellement bien situé à un modèle de concurrence basé sur le rappel, et il excelle ici. En outre, être en mesure de sérialiser et de désérialiser avec JSON natif à la fois le client et le serveur est très utile.

J'ai hâte de lire d'autres réponses ici, c'est une question fantastique.

Il convient de souligner que Node.js est également idéal pour les situations dans lesquelles vous allez réutiliser beaucoup de code sur l'écart client / serveur. le Cadre Meteor Cela rend la chose très facile, et beaucoup de gens suggèrent que cela pourrait être l'avenir du développement web. Je peux dire par expérience que c'est très amusant d'écrire du code dans Meteor, et une grande partie de cela passe moins de temps à réfléchir à la façon dont vous allez restructurer vos données, donc le code qui fonctionne dans le navigateur peut facilement manipulez-le et renvoyez-le.

Voici un article sur Pyramid et long polling, qui s'avère très facile à mettre en place avec un peu d'aide de gevent: TicTacToe et longue interrogation avec pyramide.


1359
2018-02-21 05:30



Je crois que Node.js est le mieux adapté pour les applications en temps réel: jeux en ligne, outils de collaboration, forums de discussion ou tout ce que fait un utilisateur (ou un robot ou un capteur) avec l'application pour être immédiatement vu par d'autres utilisateurs, sans actualisation de la page.

Je devrais également mentionner que Socket.IO en combinaison avec Node.js réduira votre latence en temps réel encore plus loin que ce qui est possible avec une longue interrogation. Socket.IO se rabattra sur l'interrogation longue dans le pire des cas, et utilisera à la place les sockets Web ou même Flash s'ils sont disponibles.

Mais je devrais également mentionner que n'importe quelle situation où le code pourrait bloquer en raison de threads peut être mieux traitée avec Node.js. Ou toute situation où vous avez besoin que l'application soit pilotée par les événements.

En outre, Ryan Dahl a déclaré dans une conférence que j'ai déjà assisté que les benchmarks Node.js rivalisent étroitement avec Nginx pour les anciennes requêtes HTTP régulières. Donc, si nous construisons avec Node.js, nous pouvons servir nos ressources normales assez efficacement, et quand nous avons besoin de choses événementielles, nous sommes prêts à les gérer.

De plus, tout est JavaScript tout le temps. Lingua Franca sur l'ensemble de la pile.


410
2018-02-21 06:43



Raisons d'utiliser NodeJS:

  • Il fonctionne Javascript, de sorte que vous pouvez utiliser le Même langue sur le serveur et le client, et même partager du code entre eux (par exemple pour la validation de formulaire, ou pour rendre des vues à chaque extrémité.)

  • le single-thread système piloté par les événements est vite même lorsque vous manipulez beaucoup de demandes à la fois, et aussi simple, par rapport à multi-thread traditionnel Java ou des cadres ROR.

  • Le bassin de plus en plus paquets accessible via NPM, y compris les bibliothèques / modules côté client et serveur, ainsi que les outils de ligne de commande pour le développement web. La plupart d'entre eux sont hébergés sur github, où vous pouvez parfois signaler un problème et le trouver en quelques heures! C'est bien d'avoir tout sous un même toit, avec des rapports standardisés et un fourking facile.

  • Il est devenu l'environnement standard de facto dans lequel s'exécuter Outils liés à Javascript et autre outils liés au Web, y compris les coureurs de tâches, les minifieurs, les embellisseurs, les linters, les préprocesseurs, les bundlers et les processeurs d'analyse.

  • Il semble tout à fait approprié pour le prototypage, le développement agile et itération rapide du produit.

Les raisons ne pas pour utiliser NodeJS:

  • Il exécute Javascript, qui n'a aucune vérification de type à la compilation. Pour grand, complexe sécurité-critique systèmes ou projets, y compris la collaboration entre différentes organisations, un langage qui encourage interfaces contractuelles et fournit vérification de type statique peut vous épargner du temps de débogage (et explosions) à long terme. (Bien que la JVM soit bloquée avec null, alors s'il vous plaît utilisez Haskell pour vos réacteurs nucléaires.)

  • Ajouté à cela, beaucoup de paquets dans NPM sont un peu brut, et toujours en développement rapide. Certaines bibliothèques pour des frameworks plus anciens ont subi une décennie de test et de correction de bugs, et sont très stable maintenant. Npmjs.org n'a aucun mécanisme pour évaluer les paquets, ce qui a conduit à une prolifération de paquets faisant à peu près la même chose, dont un grand pourcentage ne sont plus maintenus.

  • Rappel de rappel imbriqué. (Bien sûr, il y a 20 solutions différentes pour ça...)

  • Le pool de packages qui ne cesse de croître peut faire apparaître un projet NodeJS radicalement différent à partir du prochain. Il y a une grande diversité dans les implémentations en raison du grand nombre d'options disponibles (par exemple Express /Sails.js/Météore/Derby). Cela peut parfois rendre plus difficile pour un nouveau développeur de se lancer dans un projet Node. Comparez cela avec un Des rails développeur rejoignant un projet existant: il devrait être en mesure de se familiariser avec l'application assez rapidement, car toutes les applications Rails sont encouragés à utiliser un structure similaire.

  • Traiter des fichiers peut être un peu pénible. Les choses qui sont triviales dans d'autres langues, comme lire une ligne à partir d'un fichier texte, sont Assez bizarre à faire avec Node.js Il y a une question sur StackOverflow avec plus de 80 upvotes. Il y a pas de moyen simple de lire un enregistrement à la fois à partir d'un fichier CSV. Etc.

J'adore NodeJS, c'est rapide et sauvage et amusant, mais je m'inquiète qu'il ne s'intéresse guère à la rectitude prouvable. Espérons que nous pourrons éventuellement fusionner le meilleur des deux mondes. Je suis impatient de voir ce qui remplacera Node dans le futur ... :)


209
2017-11-25 21:47



Pour faire court:

Node.js est bien adapté aux applications qui ont beaucoup de connexions simultanées et chaque requête ne nécessite que très peu de cycles CPU, car la boucle d'événements (avec tous les autres clients) est bloquée lors de l'exécution d'une fonction.

Un bon article sur la boucle d'événements dans Node.js est Le blog technique de Mixu: Comprendre la boucle d'événements node.js.


208
2018-01-15 01:48



J'ai un exemple réel où j'ai utilisé Node.js. L'entreprise où je travaille a eu un client qui voulait avoir un site HTML statique simple. Ce site Web est destiné à la vente d'un article en utilisant Pay Pal et le client voulait également avoir un compteur qui montre le montant des articles vendus. Le client devrait avoir énormément de visiteurs sur ce site. J'ai décidé de faire le compteur en utilisant Node.js et le Express.js cadre.

L'application Node.js était simple. Obtenez le montant des articles vendus d'un Redis base de données, augmenter le compteur lorsque l'article est vendu et servir la valeur de compteur pour les utilisateurs via le API.

Quelques raisons pour lesquelles j'ai choisi d'utiliser Node.js dans ce cas

  1. C'est très léger et rapide. Il y a eu plus de 200 000 visites sur ce site en trois semaines et les ressources minimales du serveur ont été capables de gérer tout cela.
  2. Le compteur est vraiment facile à faire pour être en temps réel.
  3. Node.js était facile à configurer.
  4. Il y a beaucoup de modules disponibles gratuitement. Par exemple, j'ai trouvé un module Node.js pour PayPal.

Dans ce cas, Node.js était un choix impressionnant.


127
2018-05-31 06:34



Les raisons les plus importantes pour commencer votre prochain projet en utilisant Node ...

  • Tous les mecs les plus cool sont dedans ... donc ça doit être amusant.
  • Vous pouvez vous promener dans la glacière et avoir beaucoup d'aventures de Node à se vanter.
  • Vous êtes un penny pincher quand il s'agit de coûts d'hébergement cloud.
  • Été fait cela avec Rails
  • Vous détestez les déploiements IIS
  • Votre ancien travail informatique devient plutôt ennuyeux et vous souhaitiez être dans une nouvelle Start Up brillante.

Quoi attendre ...

  • Vous vous sentirez en sécurité avec Express sans tous les bloatwares dont vous n'avez jamais eu besoin.
  • Fonctionne comme une fusée et balance bien.
  • Vous en rêvez. Vous l'avez installé. Le package de noeud repo npmjs.org est le plus grand écosystème de bibliothèques open source dans le monde.
  • Votre cerveau se déformera au pays des callbacks imbriqués ...
  • ... jusqu'à ce que vous appreniez à garder votre Promesses.
  • Sequelize et Passeport sont vos nouveaux amis API.
  • Déboguer le code principalement asynchrone obtiendra umm ... intéressant .
  • Il est temps pour tous les Noders de maîtriser Manuscrit.

Qui l'utilise?

  • PayPal, Netflix, Wal-Mart, LinkedIn, Groupon, Uber, GoDaddy, Dow Jones
  • Voici pourquoi ils commuté sur Node.

105
2018-06-12 13:24



Il n'y a rien comme Silver Bullet. Tout vient avec des coûts associés. C'est comme si vous mangez de la nourriture huileuse, vous compromettre votre santé et la nourriture saine ne vient pas avec les épices comme la nourriture huileuse. C'est le choix individuel s'ils veulent la santé ou les épices comme dans leur nourriture. De la même manière que Node.js considère être utilisé dans un scénario spécifique. Si votre application ne correspond pas à ce scénario, vous ne devez pas l'envisager pour le développement de votre application. Je ne fais que mettre ma pensée sur le même:

Quand utiliser Node.JS

  1. Si le code de votre serveur nécessite très peu de cycles de processeur. Dans un autre monde, vous faites une opération non bloquante et n'avez pas d'algorithme lourd / Job qui consomme beaucoup de cycles CPU.
  2. Si vous êtes de retour de Javascript et confortable dans l'écriture de code Single Threaded comme JS côté client.

Quand ne pas utiliser Node.JS

  1. Votre requête de serveur dépend de l'algorithme / du Job consommant beaucoup de CPU.

Considération de l'évolutivité avec Node.JS

  1. Node.JS lui-même n'utilise pas tout le noyau du système sous-jacent et il est simple thread par défaut, vous devez écrire la logique par vous-même pour utiliser le processeur multi-core et le rendre multi-thread.

Alternatives à Node.JS

Il y a cependant d'autres options à utiliser à la place de Node.JS Vert.x semble être assez prometteur et a beaucoup de fonctionnalités supplémentaires comme des considérations de polygot et de meilleure évolutivité.


60
2018-04-05 17:17



Une autre bonne chose je pense Node.js est la communauté incroyable, le système de gestion de paquets (npm) et le nombre de modules que vous pouvez inclure en les incluant simplement dans votre fichier package.json.


41
2018-06-06 17:42