Je suis nouveau à ce genre de choses, mais dernièrement je l' ai entendu beaucoup de choses sur la façon dont bon Node.js est. Étant donné combien j'aime travailler avec jQuery et JavaScript en général, je ne peux m'empêcher de me demander comment décider quand utiliser Node.js. L'application Web à laquelle je pense est quelque chose comme Bitly - 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 en ligne de commande qui peut être exécuté comme un serveur Web standard et permet d'exécuter des programmes JavaScript
- utilise le grand moteur JavaScript V8
- est très bon lorsque vous devez faire plusieurs choses en même temps
- est basé sur des événements afin que toutes les merveilleuses choses de type Ajax puissent être faites côté serveur
- nous permet de partager le code entre le navigateur et le backend
- nous permet de parler avec MySQL
Certaines des sources que j'ai rencontrées sont:
- Plonger dans Node.js - Introduction et installation
- Comprendre NodeJS
- Noeud par exemple ( Archive.is )
- Créons une application Web: NodePad
Étant donné que Node.js peut être exécuté presque prêt à l'emploi sur les instances EC2 d'Amazon , j'essaie de comprendre quel type de problèmes nécessite Node.js par opposition à l'un des puissants rois comme PHP , Python et Ruby . Je comprends que cela dépend vraiment de l'expertise que l'on a sur une langue, mais ma question relève plus de la catégorie générale: quand utiliser un cadre particulier et à quel type de problèmes est-il particulièrement adapté?
la source
Réponses:
Vous avez fait un excellent travail pour résumer ce qui est génial avec Node.js. Mon sentiment est que Node.js est particulièrement adapté aux applications où vous souhaitez maintenir une connexion persistante entre le navigateur et le serveur. En utilisant une technique connue sous le nom de "longue interrogation" , vous pouvez écrire une application qui envoie des mises à jour à l'utilisateur en temps réel. Faire de longs sondages sur de nombreux géants du Web, comme Ruby on Rails ou Django , créerait une charge énorme sur le serveur, car chaque client actif mange un processus serveur. Cette situation équivaut à une attaque tarpit . Lorsque vous utilisez quelque chose comme Node.js, le serveur n'a pas besoin de maintenir des threads séparés pour chaque connexion ouverte.
Cela signifie que vous pouvez créer une application de chat basée sur un navigateur dans Node.js qui ne nécessite presque aucune ressource système pour servir un grand nombre de clients. Chaque fois que vous souhaitez effectuer ce type d'interrogation longue, Node.js est une excellente option.
Il convient de mentionner que Ruby et Python ont tous deux des outils pour faire ce genre de chose ( eventmachine et twisted , respectivement), mais que Node.js le fait exceptionnellement bien, et à partir de zéro . JavaScript est exceptionnellement bien situé par rapport à un modèle de concurrence basé sur le rappel, et il excelle ici. De plus, pouvoir sérialiser et désérialiser avec JSON natif à la fois pour le client et le serveur est assez astucieux.
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 réutiliserez beaucoup de code à travers l'écart client / serveur. Le framework Meteor rend cela très facile, et beaucoup de gens suggèrent que cela pourrait être l'avenir du développement web. Par expérience, je peux dire 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, de sorte que le code qui s'exécute 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 Long Polling with Pyramid .
la source
Je pense que Node.js est le mieux adapté aux applications en temps réel: jeux en ligne, outils de collaboration, salles de discussion ou tout ce que fait un utilisateur (ou robot? Ou capteur?) Avec l'application doit être vu par les autres utilisateurs immédiatement, sans actualisation de page.
Je dois également mentionner que Socket.IO en combinaison avec Node.js réduira encore plus votre latence en temps réel que ce qui est possible avec une longue interrogation. Socket.IO retombera dans l'interrogation longue dans le pire des cas, et utilisera à la place des sockets Web ou même Flash s'ils sont disponibles.
Mais je dois également mentionner que presque toutes les situations où le code pourrait se bloquer en raison de threads peuvent être mieux traitées 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é lors d'une conférence à laquelle j'ai assisté une fois que les benchmarks Node.js rivalisaient é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 de manière assez efficace, et lorsque nous avons besoin de choses événementielles, il est prêt à les gérer.
De plus, c'est tout JavaScript tout le temps. Lingua Franca sur toute la pile.
la source
.js
fichiers. Vert pour le côté client, bleu pour le côté serveur. Je continue de me "perdre".Raisons d'utiliser NodeJS:
Il exécute Javascript, vous pouvez donc utiliser le même langage sur le serveur et le client, et même partager du code entre eux (par exemple pour la validation de formulaire, ou pour afficher des vues à chaque extrémité.)
Le système piloté par événements à un seul thread est rapide même lors du traitement de nombreuses demandes à la fois, et également simple, par rapport aux frameworks Java ou ROR multi-threads traditionnels .
Le pool sans cesse croissant de packages accessibles 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 commodément hébergés sur github, où parfois vous pouvez signaler un problème et le résoudre en quelques heures! C'est agréable de tout avoir sous un même toit, avec un rapport de problème standardisé et un forking facile.
Il est devenu l'environnement standard de facto dans lequel exécuter des outils liés à Javascript et d'autres outils liés au Web , y compris des exécuteurs de tâches, des minificateurs, des embellisseurs, des linters, des préprocesseurs, des bundlers et des processeurs d'analyse.
Il semble tout à fait adapté au prototypage, au développement agile et à l'itération rapide des produits .
Raisons de ne pas utiliser NodeJS:
Il exécute Javascript, qui n'a pas de vérification de type à la compilation. Pour les grands systèmes complexes et critiques pour la sécurité , ou les projets comprenant la collaboration entre différentes organisations, un langage qui encourage les interfaces contractuelles et fournit une vérification de type statique peut vous faire économiser du temps de débogage (et des explosions ) à long terme. (Bien que la JVM soit bloquée
null
, veuillez utiliser Haskell pour vos réacteurs nucléaires.)De plus, la plupart des packages de NPM sont un peu bruts et toujours en développement rapide. Certaines bibliothèques d'anciens frameworks ont subi une décennie de tests et de corrections de bugs et sont très stables à l'heure actuelle. Npmjs.org n'a pas de mécanisme pour évaluer les packages , ce qui a conduit à une prolifération de packages faisant plus ou moins la même chose, dont un grand pourcentage n'est plus maintenu.
Enfer de rappel imbriqué. (Bien sûr, il existe 20 solutions différentes à cela ...)
Le pool sans cesse croissant de packages peut faire apparaître un projet NodeJS radicalement différent du suivant. Il existe une grande diversité d'implémentations en raison du grand nombre d'options disponibles (par exemple Express / Sails.js / Meteor / Derby ). Cela peut parfois rendre plus difficile pour un nouveau développeur de se lancer dans un projet Node. Comparez cela avec un développeur Rails qui rejoint un projet existant: il devrait pouvoir se familiariser assez rapidement avec l'application, car toutes les applications Rails sont encouragées à utiliser une structure similaire .
Le traitement des fichiers peut être un peu pénible. Les choses triviales dans d'autres langues, comme lire une ligne d'un fichier texte, sont assez étranges pour faire avec Node.js qu'il y a une question StackOverflow à ce sujet avec plus de 80 votes positifs. Il n'y a pas de moyen simple de lire un enregistrement à la fois à partir d'un fichier CSV . Etc.
J'adore NodeJS, il est rapide, sauvage et amusant, mais je crains qu'il ne s'intéresse pas à la justesse prouvable. Espérons que nous pourrons éventuellement fusionner le meilleur des deux mondes. J'ai hâte de voir ce qui remplacera Node à l'avenir ... :)
la source
npm search
etnpm show
vous montrera la date de la dernière version d'un package.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énement (avec tous les autres clients) est bloquée lors de l'exécution d'une fonction.
Un bon article sur la boucle d'événement dans Node.js est le blog tech de Mixu: Comprendre la boucle d'événements Node.js .
la source
J'ai un exemple du monde réel où j'ai utilisé Node.js. L'entreprise où je travaille a trouvé un client qui voulait avoir un simple site Web HTML statique. Ce site Web est destiné à la vente d'un article à l'aide de PayPal et le client souhaitait également disposer d'un compteur indiquant le nombre d'articles vendus. Le client devrait avoir une énorme quantité de visiteurs sur ce site Web. J'ai décidé de faire le compteur en utilisant Node.js et le framework Express.js .
L'application Node.js était simple. Obtenez le montant des articles vendus à partir d'une base de données Redis , augmentez le compteur lorsque l'article est vendu et servez la valeur du compteur aux utilisateurs via l' API .
Quelques raisons pour lesquelles j'ai choisi d'utiliser Node.js dans ce cas
Dans ce cas, Node.js était un choix génial.
la source
Les raisons les plus importantes pour démarrer votre prochain projet en utilisant Node ...
À quoi s'attendre ...
Qui l'utilise?
la source
async
/await
maintenant nous pouvons déployer un code de nœud asynchrone beaucoup plus propre qui prend également en charge le traditionneltry
/catch
. En 2016/17, les codeurs JS passent à ES6.Rien de tel que Silver Bullet. Tout vient avec un certain coût qui lui est associé. C'est comme si vous mangez des aliments gras, vous compromettez votre santé et les aliments sains ne viennent pas avec des épices comme les aliments gras. C'est un choix individuel s'ils veulent de la santé ou des épices comme dans leur nourriture. De même, 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 la prendre en compte pour le développement de votre application. Je mets juste ma pensée sur le même:
Quand utiliser Node.JS
Quand NE PAS utiliser Node.JS
Considérations d'évolutivité avec Node.JS
Alternatives à Node.JS
Il existe d'autres options à utiliser à la place de Node.JS, mais Vert.x semble être assez prometteur et possède de nombreuses fonctionnalités supplémentaires comme le polygot et de meilleures considérations d'évolutivité.
la source
fork
. Voir stackoverflow.com/questions/9546225/… . Le nœud gère très bien plusieurs cœurs avec lecluster
module. nodejs.org/api/cluster.htmlUne autre grande chose que je pense que personne n'a mentionnée à propos de Node.js est la communauté incroyable, le système de gestion des packages (npm) et la quantité de modules qui existent que vous pouvez inclure en les incluant simplement dans votre fichier package.json.
la source
Mon article: nodejs est idéal pour créer des systèmes en temps réel comme l'analytique, les applications de chat, les API, les serveurs publicitaires, etc.
Éditer
Cela fait plusieurs années que j'ai commencé à utiliser nodejs et je l'ai utilisé pour créer de nombreuses choses différentes, y compris des serveurs de fichiers statiques, des analyses simples, des applications de chat et bien plus encore. Ceci est mon point de vue sur l'utilisation de nodejs
Quand utiliser
Lors de la création d'un système qui met l'accent sur la concurrence et la vitesse.
Quand ne pas utiliser
C'est un serveur Web très polyvalent, vous pouvez donc l'utiliser où vous voulez, mais probablement pas dans ces endroits.
Gardez à l'esprit que je ne fais que piqûre. Pour les serveurs de fichiers statiques, apache est préférable, principalement parce qu'il est largement disponible. La communauté nodejs est devenue plus grande et plus mature au fil des ans et il est sûr de dire que nodejs peut être utilisé à peu près partout si vous avez votre propre choix d'hébergement.
la source
Il peut être utilisé là où
Sur le front mobile, les entreprises en prime time se sont appuyées sur Node.js pour leurs solutions mobiles. Découvrez pourquoi?
LinkedIn est un utilisateur important. L'intégralité de leur pile mobile est construite sur Node.js. Ils sont passés de 15 serveurs avec 15 instances sur chaque machine physique à seulement 4 instances, ce qui peut gérer le double du trafic!
eBay a lancé ql.io, un langage de requête Web pour les API HTTP, qui utilise Node.js comme pile d'exécution. Ils ont pu régler une station de travail Ubuntu régulière de qualité développeur pour gérer plus de 120 000 connexions actives par processus node.js, chaque connexion consommant environ 2 Ko de mémoire!
Walmart a repensé son application mobile pour utiliser Node.js et a poussé son traitement JavaScript vers le serveur.
En savoir plus sur: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/
la source
Nœud idéal pour le traitement simultané des demandes -
Commençons donc par une histoire. Depuis 2 ans, je travaille sur JavaScript et développe le front-end web et je l'apprécie. Les gars du back-end nous fournissent des API écrites en Java, en python (peu nous importe) et nous écrivons simplement un appel AJAX, récupérons nos données et devinez quoi! nous avons fini. Mais en réalité, ce n'est pas si simple, si les données que nous obtenons ne sont pas correctes ou s'il y a une erreur de serveur, nous sommes bloqués et nous devons contacter nos back-end par mail ou chat (parfois sur WhatsApp aussi :)). n'est pas cool. Et si nous écrivions nos API en JavaScript et appelions ces API depuis notre serveur frontal? Oui, c'est plutôt cool parce que si nous rencontrons un problème dans l'API, nous pouvons l'examiner. Devine quoi ! vous pouvez le faire maintenant, comment? - Node est là pour vous.
D'accord, vous pouvez écrire votre API en JavaScript, mais que faire si je suis d'accord avec le problème ci-dessus. Avez-vous une autre raison d'utiliser l'API node for rest?
voici donc la magie commence. Oui, j'ai d'autres raisons d'utiliser le nœud pour nos API.
Revenons à notre système API de repos traditionnel qui est basé sur une opération de blocage ou un thread. Supposons que deux demandes simultanées se produisent (r1 et r2), chacune d'entre elles nécessite une opération de base de données. Donc, dans le système traditionnel, ce qui se passera:
1. Attente: Notre serveur commence à servir la
r1
demande et attend la réponse à la requête. après la fin der1
, le serveur commence à servirr2
et le fait de la même manière. Attendre n'est donc pas une bonne idée car nous n'avons pas beaucoup de temps.2. Threading Way: Notre serveur créera deux threads pour les deux requêtes
r1
etr2
remplira leur fonction après avoir interrogé la base de données, donc refroidissez-la rapidement. alors vous devez faire face à des problèmes de type impasse. Donc, c'est mieux que d'attendre, mais des problèmes persistent.Maintenant, voici comment le nœud va le faire:
3. Nodeway: lorsque la même demande simultanée arrive dans le nœud, il enregistre un événement avec son rappel et avance, il n'attendra pas la réponse à la requête pour une
r1
demande particulière . dans le nœud qui remplit cette fonction.) enregistrer un événement avec sa fonction de rappel et aller de l'avant pour lar2
demande de service et enregistrer de manière similaire son événement avec son rappel. Chaque fois qu'une requête se termine, elle déclenche son événement correspondant et exécute son rappel jusqu'à la fin sans être interrompue.Donc pas d'attente, pas de thread, pas de consommation de mémoire - oui, c'est nodeway pour servir l'API de repos.
la source
Ma dernière raison de choisir Node.js pour un nouveau projet est:
Être capable de faire du développement basé sur le cloud pur
J'utilise Cloud9 IDE depuis un certain temps et maintenant je ne peux pas m'imaginer sans, il couvre tous les cycles de vie du développement. Tout ce dont vous avez besoin est un navigateur et vous pouvez coder à tout moment et n'importe où sur n'importe quel appareil. Vous n'avez pas besoin d'archiver le code sur un ordinateur (comme à la maison), puis de payer sur un autre ordinateur (comme au travail).
Bien sûr, il peut y avoir un IDE basé sur le cloud pour d'autres langues ou plates-formes (Cloud 9 IDE ajoute également des supports pour d'autres langues), mais utiliser Cloud 9 pour faire le développement de Node.js est vraiment une grande expérience pour moi.
la source
Une autre chose que le nœud offre est la possibilité de créer plusieurs instants v8 de nœud en utilisant le processus enfant du nœud ( childProcess.fork () nécessitant chacun 10 Mo de mémoire selon les documents) à la volée, n'affectant donc pas le processus principal exécutant le serveur. Ainsi, décharger un travail d'arrière-plan qui nécessite une énorme charge de serveur devient un jeu d'enfant et nous pouvons facilement les tuer au fur et à mesure des besoins.
J'ai beaucoup utilisé le nœud et dans la plupart des applications que nous construisons, nécessitent en même temps des connexions de serveur, donc un trafic réseau important. Des cadres comme Express.js et les nouveaux Koajs (qui ont supprimé l'enfer de rappel) ont rendu le travail sur le nœud encore plus facile.
la source
Enfiler des longjohns en amiante ...
Hier, mon titre avec Packt Publications, Programmation réactive avec JavaScript . Ce n'est pas vraiment un titre centré sur Node.js; les premiers chapitres sont destinés à couvrir la théorie, et les chapitres ultérieurs à code élevé couvrent la pratique. Parce que je ne pensais pas vraiment qu'il serait approprié de ne pas donner aux lecteurs un serveur Web, Node.js semblait de loin le choix évident. L'affaire a été classée avant même son ouverture.
J'aurais pu donner une vue très positive de mon expérience avec Node.js. Au lieu de cela, j'étais honnête au sujet des bons et des mauvais points que j'ai rencontrés.
Permettez-moi d'inclure quelques citations pertinentes ici:
L'annexe, que je ne voulais pas vraiment après la montée du crescendo dans les derniers chapitres et la conclusion, parle de ce que j'ai pu trouver dans l'écosystème et a fourni une solution de contournement au littéralisme débile:
Échanger deux commentaires dans l'ordre:
la source
Si votre application attache principalement des API Web ou d'autres canaux io, donne ou prend une interface utilisateur, node.js peut être un choix judicieux pour vous, surtout si vous souhaitez tirer le meilleur parti de l'évolutivité, ou, si votre langue principale dans la vie est javascript (ou transpilers javascript de toutes sortes). Si vous créez des microservices, node.js est également correct. Node.js convient également à tout projet petit ou simple.
Son principal argument de vente est qu'il permet aux front-enders d'assumer la responsabilité des trucs back-end plutôt que de la division typique. Un autre argument de vente justifiable est de savoir si votre main-d'œuvre est orientée javascript pour commencer.
Au-delà d'un certain point cependant, vous ne pouvez pas faire évoluer votre code sans de terribles hacks pour forcer la modularité, la lisibilité et le contrôle de flux. Cependant, certaines personnes aiment ces hacks, provenant en particulier d'un arrière-plan javascript événementiel, elles semblent familières ou pardonnables.
En particulier, lorsque votre application doit effectuer des flux synchrones, vous commencez à saigner sur des solutions semi-cuites qui vous ralentissent considérablement en termes de processus de développement. Si vous avez des pièces à calcul intensif dans votre application, marchez avec prudence en choisissant (uniquement) node.js. Peut-être que http://koajs.com/ ou d'autres nouveautés atténuent ces aspects à l'origine épineux, par rapport à quand j'ai utilisé node.js à l'origine ou écrit ceci.
la source
Je peux partager quelques points où et pourquoi utiliser le nœud js.
Désavantages:-
Conclusion: - Nodejs est préférable d'utiliser pour des applications simples et en temps réel. Si vous souhaitez créer une application avec le chat et toute fonctionnalité collaborative .. le nœud peut être utilisé dans des parties spécifiques et rester doit aller avec votre technologie de confort.
la source
Le nœud est idéal pour les prototypes rapides, mais je ne l'utiliserais plus jamais pour quelque chose de complexe. J'ai passé 20 ans à développer une relation avec un compilateur et ça me manque vraiment.
Node est particulièrement pénible pour maintenir le code que vous n'avez pas visité depuis un certain temps. Les informations de type et la détection d'erreur de compilation sont de BONNES CHOSES. Pourquoi jeter tout ça? Pour quoi? Et dang, quand quelque chose va vers le sud, la pile trace assez souvent complètement inutile.
la source