Quoi Node.js?

Je ne comprends pas tout à fait ce qui est
http://en.wikipedia.org/wiki/Node.js
. C'est peut-être parce que je suis fondamentalement un développeur Web d'applications métier. Qu'est-ce que c'est et quoi de cet avantage?

Pour autant que je sache jusqu'à présent, c'est comme ça:

Le modèle de programmation est géré par des événements, notamment la manière dont il traite
http://en.wikipedia.org/wiki/Input/output
.

Il utilise
http://en.wikipedia.org/wiki/JavaScript
, et l'analyseur syntaxique
http://en.wikipedia.org/wiki/V ... %2529
.

Il peut être facilement utilisé pour créer des applications de serveur parallèle.

Est-ce que je comprends bien? Si oui, quels sont les avantages evented I/O, - Est-ce juste plus pour le parallélisme? De plus, si la direction est Node.js Le même cadre, ainsi qu'un modèle de programmation basé sur JavaScript /V8/?
Invité:

Emilie

Confirmation de:

j'utilise Node.js Au travail et trouvez-le très puissant. Forcé de choisir un mot pour décrire Node.js, je dirais "interesting" /Qu'est-ce qui n'est pas un adjectif purement positif/. La communauté se développe et se développe activement. JavaScript, Malgré ses bizarreries, ce sera peut-être une excellente langue pour la programmation. Et vous repenserez chaque jour votre propre compréhension. "best practice" et des modèles de code bien structuré. En ce moment B. Node.js une énorme énergie des idées et un travail de travail vous expose à toutes ces réflexions - Grande haltérophilie mentale.

Node.js en production, bien sûr, peut-être, mais loin de "turn-key" deployment, Cela semblerait une documentation promise. DE Node.js v0.6.x "cluster" a été intégré à la plate-forme, fournissant l'un des principaux blocs de construction, mais mon script "production.js" Est encore ~150 Lignes logiques pour le traitement de choses telles que la création d'un catalogue de magazines, une élimination des travailleurs morts, etc. pour le service de production "serious" Vous devez également être préparé pour l'étranglement des connexions entrantes et effectuer tout ce qui Apache Fait pour
http://en.wikipedia.org/wiki/PHP
. Être juste
http://en.wikipedia.org/wiki/Ruby_on_Rails
Il a

exactement

ce problème. Il est résolu avec l'aide de deux mécanismes complémentaires: 1/ placement Ruby sur Rails/Node.js Pour dédié webserver /écrit sur C et vérifié en enfer et en arrière/, comme
http://en.wikipedia.org/wiki/Nginx
/ou
http://en.wikipedia.org/wiki/Apache_HTTP_Server
/
http://en.wikipedia.org/wiki/Lighttpd
/. webserver Peut servir efficacement au contenu statique, conserver un journal d'accès, écraser URLs , Achevée
http://en.wikipedia.org/wiki/SSL
, Appliquez des règles d'accès et gérez plusieurs services de filiale. Pour les requêtes tombées dans le service actuel du nœud, webserver Traite une demande à travers. 2/ Utilisation de type-cadre
http://unicorn.bogomips.org/
, qui gérera les processus de travail, les traiter périodiquement, etc. Je n'ai toujours pas trouvé Node.js cadre des employés, qui semble complètement cuit au four; il peut exister, mais je n'ai pas encore trouvé ça et toujours utiliser ~150 rangées dans mon roulé manuellement "production.js".

Lire des cadres tels que
http://expressjs.com/
, Fait penser que la pratique standard consiste simplement à servir tout à travers un service. jack-of-all-trades Node.js ... "app.use/express.static/__catalogue + '/Publique '//". Pour les services avec une charge et un développement plus petits, ceci est probablement normal. Mais dès que vous essayez de mettre une grande charge temporaire sur votre service et de le gérer 24/7,, Vous trouverez rapidement des motifs qui poussent les grands sites à avoir un code C bien cuit et durci, tel que Nginx, Transfert de son site Web et traiter toutes les demandes de contenu statique /... jusqu'à ce que vous ayez mis en place
http://en.wikipedia.org/wiki/C ... twork
, comme
http://en.wikipedia.org/wiki/Amazon_CloudFront
//. Pour un regard de regarder un peu humoristique et lâchement négatif, regardez
http://teddziuba.com/2011/10/n ... .html
.

Node.js Trouve également de plus en plus d'applications inexpéricatrices. Même si vous utilisez quelque chose d'autre pour servir de contenu Web, vous pouvez toujours utiliser Node.js En tant qu'outil de construction utilisant des modules npm, Organiser votre code,
https://github.com/substack/node-browserify
, coudre-les dans un atout, et
https://github.com/mishoo/UglifyJS
, Pour le minimiser deployment. Travailler avec le réseau JavaScript-parfait
http://en.wikipedia.org/wiki/O ... match
, Et souvent, cela en fait le moyen le plus simple d'attaquer. Par exemple, si vous voulez ramper à travers un tas
http://en.wikipedia.org/wiki/JSON
Charges JSON Réponse, vous devez utiliser mon module
https://github.com/ddopson/underscore-cli
CLI, Courroie de service données structurées.

avantages / Minus:

Pro: Pour écriture de gars du serveur JavaScript sur le backend était "gateway drug" Explorer des modèles modernes UI. Je n'ai plus peur d'écrire un code client.

Pro: a tendance à encourager le bon chèque d'erreur /err Retourne près tous les défis inversés, forçant le programmeur à le gérer; Outre, async.js et d'autres bibliothèques sont traitées par paradigme "fail if any of these subtasks fails" Beaucoup mieux qu'un code synchrone typique/

Pro: Des tâches intéressantes et généralement difficiles deviennent triviales - Par exemple, recevoir l'état des tâches en vol, la communication entre employés ou partager l'état du cache

Pro: Une énorme communauté et des tonnes d'excellentes bibliothèques basées sur un gestionnaire de paquets solide /npm/

Con: JavaScript N'a pas de bibliothèque standard. Vous êtes tellement habitué à l'importation de fonctionnalités qu'il semble étrange lorsque vous utilisez JSON.parse ou une autre méthode d'assemblage qui ne nécessite pas d'ajout d'un module npm. Cela signifie qu'il y a cinq versions de tout. Même des modules inclus dans Node.js "core", Il y a cinq options supplémentaires si vous n'êtes pas satisfait de la mise en œuvre par défaut. Cela conduit à une évolution rapide, mais aussi un certain niveau de confusion.

Comparé à un modèle simple one-process-per-request /
http://en.wikipedia.org/wiki/L ... %2529
/:

Pro: Évolutivité jusqu'à des milliers de composés actifs. Très rapidement et très efficacement. Pour un parc Web, cela peut signifier une réduction de 10 Une fois le nombre de cases requises comparées à PHP ou Ruby

Pro: Écrire des modèles parallèles facilement. Imaginez que vous devez extraire trois /ou N/ grands objets binaires de
http://en.wikipedia.org/wiki/Memcached
. Faire PHP ... Vous venez d'écrire un code qui récupère le premier gros objet binaire, puis le second, puis le troisième? Wow, quelle lenteur. Il y a un module spécial PECL, Pour résoudre ce problème particulier pour Memcached, Mais que faire si vous voulez avoir des données Memcached Parallèlement à la demande de base de données? DANS Node.js, Depuis le paradigme d'Asynchronne, la présence d'une demande Web fait plusieurs choses en parallèle, très naturelles.

Con: Le code asynchrone est un code synchrone fondamentalement plus compliqué et la courbe d'apprentissage avancée peut être difficile pour les développeurs sans une compréhension claire de ce qui signifie réellement une exécution parallèle. Cependant, il est significativement moins difficile que d'écrire tout code multi-fileté avec blocage.

Con: Si la demande d'informatique intensive est effectuée, par exemple, pour 100 ms,, Il arrêtera le traitement d'autres demandes traitées dans le même processus. Node.js ... AKA,
http://en.wikipedia.org/wiki/C ... aring
. Il peut être ramolli à l'aide d'un modèle. Web Workers /Exécuter une sous-processus pour résoudre une tâche coûteuse/. De plus, vous pouvez utiliser un grand nombre d'employés. Node.js et laissez chacun d'entre eux de gérer une seule demande en même temps /toujours assez efficace car il n'y a pas de processus de recyclage/.

Con: Exécution du système de fabrication MUCH plus compliqué que le modèle CGI , par exemple Apache + PHP ,
http://en.wikipedia.org/wiki/Perl
,
http://en.wikipedia.org/wiki/R ... %2529
Etc. Des exceptions non traitées mèneront à l'arrêt de l'ensemble du processus, ce qui nécessitera un redémarrage logique de travailleurs refusés. /cm.
http://nodejs.org/docs/latest/api/cluster.html
/. Les modules avec un code natif de buggy peuvent difficilement interrompre le processus. Chaque fois que le travailleur meurt, toutes les demandes qu'il traitées sont rejetées, donc une buggy API peut facilement aggraver le service pour d'autres défis APIs.

Contre le service d'écriture "real" dans Java / C# / C /C? Est ce que c'est vraiment?/

Pro: effectuer des opérations asynchrones dans Node.js Il est plus facile que l'achèvement de la sécurité du fil dans tout autre endroit et offre éventuellement des avantages plus importants. Nœud.js est définitivement le plus petit paradigme asynchrone douloureux dans lequel j'ai jamais travaillé. Avec de bonnes bibliothèques, il n'est qu'un peu plus compliqué que d'écrire un code synchrone.

Pro: Aucune erreur de multithreading / Fermer à clé. True, vous investissez dans l'écriture d'un code plus détaillé à l'avance, qui exprime le bon flux de travail asynchrone sans aucune opération de blocage. Et vous devez écrire quelques tests et faire ce problème /C'est une langue de script, et fat fingering variable names Attrapé uniquement pendant le test de l'unité/. BUT, Dès que vous le faites travailler, la surface de la surface
http://en.wikipedia.org/wiki/Heisenbug
- Des problèmes tendus qui se manifestent qu'une fois qu'un million de lances, cette surface est tout simplement beaucoup plus faible. Taxes, code d'écriture Node.js, Fortement chargé dans la phase de codage. Ensuite, vous, en règle générale, obtenez un code stable.

Pro: JavaScript Il est beaucoup plus facile d'exprimer la fonctionnalité. Il est difficile de prouver avec des mots, mais
http://en.wikipedia.org/wiki/JSON
, Dactylographie dynamique, lambda Notation, héritage prototypique, modules de lumière, n'importe quoi ... Nécessite simplement moins de code pour exprimer les mêmes idées.

Kon: Peut-être que vous aimez vraiment les services de codage dans Java?

Pour obtenir un autre point de vue sur JavaScript et Node.js, Vérifier
http://n0tw0rthy.wordpress.com ... e-js/
, Enregistrement de blog sur les impressions et l'expérience de développeur Java, en train d'étudier Node.js.

Modules

Considérant node, Gardez à l'esprit votre choix de bibliothèques JavaScript sera

DEFINE

Ton expérience. La plupart des gens utilisent au moins deux, assistant de modèle asynchrone /Step, Futures, Async/ et le module de sucre JavaScript /
http://en.wikipedia.org/wiki/Underscore.js
/.

Assistant / JavaScript Sucre:

http://documentcloud.github.com/underscore/
- Utilise le. Fais-le. Cela rend votre code agréable et lisible avec de telles choses comme _.isString// et _.isArray//. Je ne suis pas tout à fait sûr de savoir comment vous pourriez écrire un code sécurisé autrement. De plus, pour prolongé command-line-fu Vérifiez ma propre
https://github.com/ddopson/underscore-cli
.

Modules Modèles asynchrones:

https://github.com/creationix/step
- Un moyen très élégant d'exprimer des combinaisons d'actions consécutives et parallèles. Ma recommandation personnelle. Voir
https://coderoad.ru/5989538/
À propos de la façon dont le code étape ressemble.

https://github.com/coolaj86/futures
-Good plus flexible /Est-ce vraiment bon?/ Méthode pour exprimer la commande à travers les exigences. Peut être exprimé quelque chose comme "Commençons, b, c parallèle. Lorsque A et B Finir, commencer AB. Lorsque A et C Fin, commencer AC."Cette flexibilité nécessite une plus grande prudence pour éviter les erreurs de votre flux de travail. /Par exemple, ne jamais causer de rappel ou l'appelant plusieurs fois./. Cm
https://coderoad.ru/5989538/
Riosa sur l'utilisation de futures /Ceci est un message qui m'a fait "get" Contrat à terme/.

https://github.com/caolan/async
- Une bibliothèque plus traditionnelle avec une méthode pour chaque modèle. J'ai commencé de cela à mon appel religieux à step et la réalisation ultérieure que tous les modèles d'asynchronisme peuvent être exprimés dans Step Avec l'aide d'un paradigme plus lisible.

http://tamejs.org/
-écrit OKCupid, Ceci est un précompiler qui ajoute une nouvelle primauté linguistique. "await" Pour une écriture élégante des flux de travail consécutifs et parallèles. Le modèle a l'air incroyable, mais cela nécessite une compilation préalable. Je décide toujours cette question.

https://github.com/Sage/streamlinejs
-concurrent TameJS. J'ai tendance à apprivoiser, mais vous pouvez résoudre moi-même.

Ou pour tout lire sur les bibliothèques asynchrones, voir
http://www.infoq.com/articles/ ... cript
Avec les auteurs.

Cadre Web:

https://github.com/visionmedia/express
Great Ruby on Rails-esk framework Pour organiser des sites Web. Il utilise
http://jade-lang.com/
comme XML/HTML Modèle de fabrication de moteurs HTML Beaucoup moins douloureux, presque élégant, même.

http://api.jquery.com/category/selectors/
Bien que techniquement et ce ne soit pas un module nodal, jQuery Devient rapidement une norme de facto pour l'interface utilisateur client. jQuery Fournit des sélecteurs de type CSS dans 'query' Pour des ensembles d'éléments DOM, qui peut alors être utilisé /Définir des gestionnaires, des propriétés, des styles, etc./. Sur le même principe, Twitter est
http://twitter.github.com/bootstrap/
CSS framework,
http://documentcloud.github.com/backbone/
Pour modèle MVC et
https://github.com/substack/node-browserify
Pour coudre tous vos fichiers JavaScript dans un fichier. Tous ces modules deviennent des normes réelles, vous devez donc au moins les vérifier si vous n'avez pas entendu parler d'eux.

Essai:

http://github.com/jshint/node-jshint
- tout usage; Je ne l'ai pas utilisé d'abord qu'il semble incompréhensible maintenant. JSLint ajoute un tas de vérifications de base que vous obtenez à l'aide d'une langue compilée, telle que Java. Supports non coordonnés, variables non déclarées, types de formes et tailles diverses. Vous pouvez également inclure diverses formes de ce que j'appelle "anal mode", où vous vérifiez le style whitespace Et tout c'est ce qui est OK, Si c'est votre tasse de thé , Mais la valeur réelle consiste à recevoir un retour instantané sur le nombre exact de la ligne où vous avez oublié de fermer"/" ... Sans la nécessité d'exécuter votre code et d'entrer dans une chaîne offensive. "JSHint" - Ceci est une option plus personnalisable. JSLint

http://www.jslint.com/
http://visionmedia.github.com/mocha/
- serments actuels que je commence à préférer. Les deux cadres sont bien adaptés aux bases, mais les modèles complexes sont généralement plus faciles à exprimer dans MOKO.

http://vowsjs.org/
- C'est vraiment très élégant. Et il imprime un formidable rapport. /--spec/, vous montrant quels cas de test ont passé / Échoué. Dépenser 30 minutes pour l'étudier et vous pouvez créer des tests de base pour vos modules avec un effort minimal.

https://github.com/assaf/zombie
-Eux tests pour HTML et JavaScript utilisant JSDom
https://github.com/tmpvar/jsdom/
comme virtuel "browser". Chose très puissante. Combinez son S.
https://github.com/assaf/node-replay#readme
, Afin d'obtenir des tests de code déterministe dans le navigateur.

Commenter comment "think about" essai:

Le test n'est pas obligatoire. Avec une langue dynamique, telle que JavaScript, Inspections statiques

très

quelque. Par exemple, le transfert de deux paramètres à l'aide de la méthode qui s'attend à 4, Il ne sera pas interrompu tant que le code n'est exécuté. Une planche assez basse pour créer des bugs dans JavaScript. Les tests de base sont nécessaires pour reconstituer l'espace de test dans les langues compilées.

Oubliez la vérification, faites simplement pour que votre code soit exécuté. Pour chaque méthode, mon premier cas de chèque est "Rien ne casse", Et c'est le cas qui fonctionne le plus souvent. Prouvant que votre code fonctionne sans éjection 80% Les erreurs feront tant d'améliorer la confiance de votre code que vous reviendrez et d'ajouter les nuances d'analyse que vous avez manquées.

Commencez avec un petit et casser la barrière d'inertie. Nous sommes tous paresseux et nous manquons de temps et faciles à voir des tests comme "extra work". Alors commencez avec petit. Écrivez un boîtier de test 0-télécharger Module et signaler une exécution réussie. Si vous vous faites faire cela, la barrière d'inertie pour les tests sera cassée. il <30 Min Pour ce faire pour la première fois, y compris la documentation de lecture. Maintenant, écrivez un cas de test 1-appelez l'une de vos méthodes et assurez-vous que "Rien ne casse", C'est-à-dire que vous ne recevez pas d'erreur. Cas de test 1 Doit vous prendre moins d'une minute. Avec la disparition de l'inertie, il devient facile de développer progressivement la couverture du test.

Développez maintenant vos tests avec votre code. N'ayez pas peur de la façon dont le test ressemble à "correct" end-to-end Avec des serveurs fictifs et tout ça. Le code commence simplement et se développe pour gérer de nouveaux cas; Les tests devraient également. En tant que nouveaux cas, ajoutez et compliquez le code, ajoutez des cas de test pour exécuter un nouveau code. Lorsque vous détectez des erreurs, ajoutez des chèques et / Ou de nouveaux cas pour couvrir un code défectueux. Lorsque vous exécutez le débogage et de perdre confiance dans le fragment de code, revenez et ajoutez des tests pour prouver que cela fait ce que vous pensez. Capturer des exemples de données Strings /d'autres services que vous appelez, des sites Web que vous nettoyez n'importe quoi/ Et transmettez-les dans votre code d'analyse syntaxique. Quelques cas ici, améliorés de contrôle là-bas et vous obtiendrez un code très fiable.


En outre, lisez
http://nodejs.org/docs/v0.4.11/api/appendix_1.html
Modules recommandés Node.js. mais
http://en.wikipedia.org/wiki/GitHub
C'est une ressource beaucoup plus complète et bonne.

Comprendre Node, Utile de considérer plusieurs options de conception clés.

:

Node.js

Basé sur des événements

et

ASYNCHRONOUS

/

Déverrouillé

. Événements tels qu'une connexion entrante HTTP, Exécuter la fonction JavaScript, qui effectue un petit travail et exécute d'autres tâches asynchrones, telles que la connexion à une base de données ou la récupération du contenu d'un autre serveur. Une fois ces tâches exécutées, la fonction d'événement est terminée et Node.js Répétue à nouveau en mode veille. Dès que quelque chose d'autre survient, par exemple, une connexion à la base de données ou un serveur externe correspond au contenu, les fonctions de rappel sont déclenchées et un code supplémentaire est effectué. JavaScript, Potentiellement lancer des tâches encore plus asynchrones /Par exemple, une demande de base de données/. Ainsi, Node.js Il sera heureux d'alterner des actions pour plusieurs flux de travail parallèles, effectuant toutes les actions qui seront déverrouillées à tout moment. C'est pourquoi Node.js Il s'oppose si bien avec la gestion de milliers de connexions simultanées.

Pourquoi pas seulement utiliser un processus/Flux pour chaque connexion, comment sont tous les autres?

DANS Node.js Nouvelle connexion - C'est juste une très petite allocation de tas. Le lancement du nouveau processus prend de manière significative plus de mémoire, mégaoctets sur certaines plates-formes. Mais le coût réel est des frais généraux associés au contexte de commutation. Lorsque vous avez 10^6 kernel ruisseaux kernel Doit faire beaucoup de travail, trouver qui devrait effectuer la suivante. Beaucoup de travail a été dépensé pour créer un planificateur O/1/ pour Linux, Mais à la fin, il est juste beaucoup plus efficace d'avoir un processus géré par l'événement que 10^6 processus concurrents pour CPU temps. De plus, dans les conditions de congestion, le modèle multiprocessé se comporte très mal, privant des services d'administration et de gestion critiques, en particulier SSHD /Cela signifie que vous ne pouvez même pas entrer dans la case pour savoir comment il est vraiment vissé/.

Node.js

Vocationnel unique

Et sans

château

. Node.js, Comme une sélection de conception très réfléchie n'a qu'un seul flux au processus. Pour cette raison, il est fondamentalement impossible pour plusieurs flux d'accès simultanément à plusieurs flux. Ainsi, aucun verrouillage n'est nécessaire. Les fils sont très difficiles. Très très dur. Si vous n'y croyez pas, cela signifie que vous n'avez pas été impliqué dans la programmation en streaming. Il est difficile d'obtenir le blocage correct et cela conduit à des erreurs vraiment difficiles à suivre. L'élimination des serrures et de multithreading rend l'une des classes d'erreur les plus dégoûtantes disparaissent simplement. C'est peut-être le seul avantage majeur node.

Mais comment puis-je utiliser ma 16ème boîte nucléaire?

Deux voies:

Pour les grandes tâches d'informatique lourdes, telles que codage d'image, Node.js Peut exécuter des processus enfants ou envoyer des messages à des flux de travail supplémentaires. Dans ce projet, vous aurez un flux qui contrôle le flux d'événements et N Processus exécutant de graves tâches informatiques et autres 15 CPUs.

Pour réduire la bande passante sur le service Web, vous devez démarrer plusieurs serveurs. Node.js Sur un bloc, un sur le noyau, en utilisant
http://nodejs.org/api/cluster.html
/de Node.js v0.6.x Module officiel "cluster", connecté ici, remplace la version learnboost, qui a un autre API/. Ces serveurs locaux Node.js Peut-on concurrencer une prise pour effectuer de nouvelles connexions en équilibrant la charge sur eux. Dès que la connexion est acceptée, elle devient étroitement liée à l'un de ces processus courants. En théorie, cela semble mauvais, mais dans la pratique, cela fonctionne assez bien et vous permet d'éviter les maux de tête lors de la rédaction d'un code de sécurité. De plus, cela signifie que Node.js Obtient une excellente affinité avec le cache CPU, Plus efficacement en utilisant la bande passante de la mémoire.


Node.js Vous permet de faire des choses très puissantes sans dérouler.

Supposons que vous ayez un programme Node.js, qui effectue diverses tâches, écoutant les commandes
http://en.wikipedia.org/wiki/T ... tocol
Port TCP, code quelques images, etc. Avec l'aide de cinq lignes de code, vous pouvez ajouter un portail de contrôle Web basé sur HTTP, Qui montre l'état actuel des tâches actives. il EASY, À faire:


var http = require/'http'/;
http.createServer/function /req, res/ {
res.writeHead/200, {'Content-Type': 'text/plain'}/;
res.end/myJavascriptObject.getSomeStatusInfo///;
}/.listen/1337, "127.0.0.1"/;


Maintenant, vous pouvez cliquer sur le bouton. URL Et vérifiez l'état du processus d'exécution. Ajouter plusieurs boutons et vous recevrez "management portal". Si vous avez couru Perl / Python / Ruby Scénario, simple "throwing in a management portal" Pas assez simple.

Mais non JavaScript Pas lent / mal / mauvais / spawn-of-the-devil?

JavaScript a des étranges bizarités mais avec "the good parts" Il y a une langue très puissante et, dans tous les cas, JavaScript est une langue THE Sur le client /le navigateur/. JavaScript ici pour rester; D'autres langues lui sont destinées comme IL, et le talent de classe mondiale est en concurrence pour la production des moteurs les plus avancés JavaScript. À cause du rôle JavaScript Dans le navigateur, une énorme quantité d'efforts d'ingénierie est jetée à faire JavaScript très vite.
http://en.wikipedia.org/wiki/V ... %2529
- C'est le dernier moteur et le plus grand moteur javascript, Au moins ce mois-ci. Il souffle d'autres langages de script comme dans l'efficacité AND, Donc, dans la stabilité /Vous regarde Ruby/. Et il ne s'améliorera que avec d'énormes équipes travaillant sur un problème dans Microsoft, Google et Mozilla, en compétition pour créer un meilleur moteur JavaScript /Ce n'est plus JavaScript "interpreter", Comment tous les moteurs modernes font des tonnes de compilation JIT Sous la capuche avec interprétation uniquement comme option de rechange pour le code execute-once/. Oui, nous aimerions tous réparer certaines des options de langue plus étranges. JavaScript, Mais ce n'est vraiment pas si mauvais. Et la langue est tellement flexible que vous n'encodez vraiment pas JavaScript, Vous encodez Step ou jQuery - plus que toute autre langue dans JavaScript Les bibliothèques déterminent l'expérience. Pour créer des applications Web, vous devez grand savoir JavaScript Dans tous les cas, le codage avec celui-ci sur le serveur a donc une sorte de synergies de compétences. Cela m'a fait n'avoir pas peur d'écrire un code client.

De plus, si vous REALLY détester JavaScript, Vous pouvez utiliser Syntax Sugar, tel que
http://jashkenas.github.com/coffee-script/
. Ou quelque chose d'autre qui crée du code JavaScript, par exemple
http://code.google.com/webtoolkit/
/GWT/.

Au fait O. JavaScript, et ce qui est "closure"?

- Un moyen assez calme de dire que vous économisez des variables lexiquement limitées dans des chaînes d'appels. ;/ Comme ça:


var myData = "foo";
database.connect/ 'user:pass', function myCallback/ result / {
database.query/"SELECT * from Foo where id = " + myData/;
} /;
// Note that doSomethingElse// executes _BEFORE_ "database.query" which is inside a callback
doSomethingElse//;


Voyez comment vous pouvez simplement utiliser "myData", Sans rien faire gênant, par exemple, ne pas la cacher dans l'objet? Et contrairement à Java, variable "myData" Il ne devrait pas être lu que. Cette puissante fonction de langue rend la programmation asynchrone beaucoup moins verbeuse et moins douloureuse.

Écrire un code asynchrone sera toujours plus difficile que d'écrire un scénario à une seule-fileté simple, mais avec Node.js Ce n'est pas si difficile et vous obtenez de nombreux avantages en plus de l'efficacité et de l'évolutivité des milliers de connexions parallèles ...

Babette

Confirmation de:

Je pense que les avantages sont les suivants:

Développement Web dans une langue dynamique /JavaScript/ sur VM, qui est incroyablement rapide /V8/. C'est beaucoup plus rapide que Ruby, Python ou Perl.

La capacité de traiter des milliers de connexions parallèles avec un coût minimal par processus.

JavaScript Idéal pour les cycles d'événements avec des caractéristiques de première classe et closures. Les gens savent déjà comment l'utiliser de cette manière l'utiliser dans le navigateur pour répondre aux événements initiés par l'utilisateur.

Beaucoup savent déjà JavaScript, Même ceux qui ne prétendent pas au rang de programmeur. C'est peut-être le langage de programmation le plus populaire.

Utilisant JavaScript Sur un serveur Web, ainsi que dans le navigateur, réduit l'incohérence d'impédance entre deux environnements de programmation pouvant transmettre des structures de données à travers JSON, Qui travaillent de manière égale des deux côtés de l'équation. Le code de contrôle de formulaire en double peut être partagé entre le serveur et le client, etc.

Agathe

Confirmation de:

http://en.wikipedia.org/wiki/V ... %2529
- c'est la mise en œuvre de la fonction JavaScript. Il vous permet d'exécuter des applications hors connexion JavaScript /Entre autres/.

Nœud.js est juste une bibliothèque écrite pour V8, Qui fait evented I/O. Ce concept est un peu plus difficile à expliquer et je suis sûr que quelqu'un répondra avec la meilleure explication que moi ... L'essence est que, au lieu de faire une entrée ou une sortie et d'attendre quand cela se produit, vous venez de

ne pas

Nous attendons cela. Par exemple, demandez l'heure de la dernière édition du fichier:


// Pseudo code
stat/ 'somefile' /


Cela peut prendre quelques millisecondes et peut-être quelques secondes. DE evented
http://en.wikipedia.org/wiki/Input/output
Vous venez d'exécuter la demande et au lieu d'attendre autour de vous, joignez un rappel qui fonctionne lorsque la requête se termine:


// Pseudo code
stat/ 'somefile', function/ result / {
// Use the result here
} /;
// ...more code here


Cela le rend très similaire au code JavaScript dans le navigateur /Par exemple, avec la fonctionnalité de style
http://en.wikipedia.org/wiki/A ... %2529
/.

Pour plus d'informations, vous devez vérifier l'article.
http://simonwillison.net/2009/Nov/23/node/
, qui était mon introduction à library/platform... Je l'ai trouvé très bien.

Emilie

Confirmation de:

http://nodejs.org/
- Ceci est un outil de ligne de commande open source créé pour le code. JavaScript Du côté serveur. Vous pouvez télécharger
http://en.wikipedia.org/wiki/Tarball
, Compiler et installer le code source. Cela vous permet de courir JavaScript programmes.

JavaScript effectué
http://code.google.com/p/v8/
, moteur JavaScript, Conçu Google, qui est utilisé dans le navigateur
http://en.wikipedia.org/wiki/Google_Chrome
. Il utilise JavaScript API Pour accéder au réseau et au système de fichiers.

Il est populaire auprès de sa productivité et de la capacité d'effectuer des opérations parallèles.

http://debuggable.com/posts/un ... d56cb
- C'est la meilleure explication node.js,
http://nodejs.org/
J'ai trouvé jusqu'à présent.

Vous trouverez ci-dessous quelques bons articles sur ce sujet.

http://net.tutsplus.com/tutori ... e-js/
http://net.tutsplus.com/tutori ... e-js/

Emilie

Confirmation de:

closures - C'est un moyen d'effectuer du code dans le contexte dans lequel il a été créé.

Pour le parallélisme, cela signifie que vous pouvez définir des variables, puis lancer une fonction non bloquante.
http://en.wikipedia.org/wiki/Input/output
- Equipez et envoyez-la une fonction anonyme pour son rappel.

Lorsque la tâche est terminée, la fonction de rappel sera effectuée dans le contexte avec des variables, ceci fermeture.

Raison pour laquelle closures Tellement bon pour écrire des applications avec des conclusions d'entrée non bloquantes, c'est qu'il est très facile de contrôler le contexte des fonctions fonctionnant de manière asynchrone.

Agathe

Confirmation de:

Deux bons exemples concernent la manière dont vous gérez les modèles et utilisez des améliorations progressives avec eux. Vous avez juste besoin de quelques morceaux de code légers. JavaScript, Pour le faire fonctionner parfaitement.

Je vous recommande vivement de regarder ces articles:

http://www.yuiblog.com/blog/20 ... node/
http://www.yuiblog.com/blog/20 ... h-my/
Prenez n'importe quelle langue et essayez de vous rappeler comment vous contrôleriez vos modèles de fichier HTML et ce que vous aviez besoin de faire pour mettre à jour un nom de classe
http://en.wikipedia.org/wiki/C ... heets
Dans votre structure
http://en.wikipedia.org/wiki/Document_Object_Model
/Par exemple, l'utilisateur a appuyé sur l'élément de menu et vous voulez qu'il soit étiqueté comme "selected" et contenus de page mis à jour/.

DE Node.js C'est tout aussi facile comment le faire dans le code de la clientèle JavaScript. Obtenez votre noeud DOM et appliquer votre classe à lui CSS. Obtenez votre noeud DOM et innerHTML Votre contenu /Pour cela, vous aurez besoin d'un code supplémentaire. JavaScript. Lire l'article pour en savoir plus/.

Un autre bon exemple est que vous pouvez rendre votre page Web compatible avec JavaScript, Activé ou désactivé avec le même fragment de code. Imaginez que vous ayez une sélection de date faite dans JavaScript, Qui permettra à vos utilisateurs de choisir n'importe quelle date à l'aide du calendrier. Tu peux écrire /Ou utiliser/ Le même fragment de code JavaScript, Pour le faire fonctionner avec votre JavaScript, ON ou OFF.

Babette

Confirmation de:

Il y a une très bonne analogie avec un site de restauration rapide qui explique le mieux le modèle d'événement. Node.js, Voir l'article complet,
http://code.danyork.com/2011/0 ... ming/
Voici un résumé:

Si le restaurant Fast Food a suivi le modèle traditionnel basé sur les threads, vous auriez commandé de la nourriture et attendiez la file d'attente jusqu'à ce que vous l'iez. Un homme debout pour vous ne sera pas en mesure de faire une commande pendant que votre commande est exécutée. Dans le modèle géré par des événements, vous commandez de la nourriture, puis laissez la file d'attente à attendre. Tous les autres après cela sont libres de commander.

Node.js géré par des événements, mais la plupart des serveurs Web sont basés sur la diffusion en continu.York explique comment cela fonctionne Node.js:

Vous utilisez votre navigateur Web pour faire une demande de "/about.html " sur le serveur
Node.js Serveur Web.

Serveur Node.js Prend votre demande et provoque une fonction de recevoir une fonction
Ce fichier du disque.

Pendant le serveur Node.js s'attend à ce que la réception du fichier, il
Sert la demande Web suivante.

Lorsque le fichier est récupéré, il y a une fonction de rappel qui est
Inséré dans la file d'attente des serveurs Node.js.

Serveur Node.js effectue la fonctionnalité que dans ce cas serait
Visualiser la page "/about.html " Et renvoyez-le à votre navigateur Web."

Blanche

Confirmation de:

Bien
http://nodejs.org/#about

but Node C'est de fournir un moyen facile
Construire des programmes de réseau évolutif.

Le nœud est similaire dans la conception et influence ces systèmes que la machine d'événement Ruby ou tordu Python.

Evented I/O pour V8 javascript.

Pour moi, cela signifie que vous aviez raison dans les trois hypothèses. La bibliothèque semble certainement prometteuse!

Blanche

Confirmation de:

En outre, n'oubliez pas de mentionner que V8 de Google est un VERY Vite. Il convertit en fait le code JavaScript Dans le code de la machine avec une performance cohérente du fichier binaire compilé. Donc, avec toutes les autres grandes choses, c'est INSANELY vite.

Dominique

Confirmation de:

Q: Le modèle logiciel est contrôlé par des événements, notamment la manière dont elle traite
http://en.wikipedia.org/wiki/Input/output
.

Droit. Il utilise des rappels, de sorte que toute demande d'accès au système de fichiers demandera l'envoi d'une demande au système de fichiers, puis Node.js Commencez le traitement de la prochaine requête. Il ne s'inquiétera que de la demande d'E / S, dès que la réponse du système de fichiers, et à ce stade, elle exécutera le code de rappel. Cependant, vous pouvez faire des demandes d'E / S synchrones /C'est bloquer les demandes/. Le développeur doit choisir entre asynchrone /Rappeler/ ou synchrone /attente/.

Q: il utilise JavaScript, Syntaxe Analyzer-V8.

Oui

Q: Il peut être facilement utilisé pour créer des applications de serveur parallèle.

Oui, bien que vous ayez à coder manuellement beaucoup JavaScript. Peut-être qu'il vaut mieux regarder le cadre, tel que
http://www.easynodejs.com/
- Qui est livré avec une documentation en ligne complète et une application d'exemple.

Pour répondre aux questions, connectez-vous ou registre