Apprendre Node.js

Le problème exposé dans ce sujet a été résolu.

Bonjour, j’aimerais apprendre le Node.js. Ayant beaucoup entendu parler de ce framework je me suis décider à l’étudier. Pour m’entraîner, j’ai réalisé quelques bots Discord (pas grand chose, deux-trois bots avec quelques commandes) qui m’ont permis de découvrir ce framework, j’ai aussi vu de plus près ExpressJS où j’ai pu voir le côté serveur de JS.

Cependant, j’aimerais approfondir cet apprentissage de Node, j’ai vu sur beaucoup de site qu’il permettait énormément de chose, et que ce dernier est très large en possibilités.

J’aimerais que vous me donnez des ressources où appronfondir ce framework.

Ps : Pour info, je suis en train de lire la doc depuis quelque temps, mais étant donné que je ne comprends pas bien l’anglais, je met du temps, et j’essaie de bien comprendre.

Merci et bonne journée/soirée.

Tu devrais surtout apprendre JavaScript à mon avis. Node y’a rien à apprendre, y’a la doc comme tu as dit.

Par exemple ceci. Y’a rien de particulier à Node, là-dedans. Si tu sais développer en JavaScript, cette page de doc c’est comme une page de MDN ou la doc d’une lib comme lodash ou async.

Tu vois un callback, bah tu passes un callback. C’est fait.

+0 -0

Parce que PHP est bien meilleur que Node

Par contre, MDN met le dans tes bookmarks.

AmarOk

Euh, j’ai vu des choses bien meilleures en Node qu’en PHP et inversement et j’ai l’impression que c’est plus fluide en Node qu’en PHP.

Et pour MDN, j’y vais souvent pour la doc de js, merci !

C’est une très très mauvaise comparaison.

victor

Pourquoi ?

Awoken

Parce que PHP c’est un langage de programmation. Node pas.

victor

Oui, mais au niveau des performances.

Au niveau des performances je vois pas trop l’intérêt de comparer.

Node tourne sur V8 et a des performances ~3x plus élevées que PHP, que ce soit en nombre de "hello world" que tu peux servir en faisant un test de charge ou en terme de temps de réponse pour des tâches CPU intensive. C’est pas surprenant sachant qu’une requête vers une page PHP passe par le serveur web qui demande à PHP d’ouvrir un fichier, de le compiler en bytecode, puis d’interpréter ce bytecode. Node tourne, il s’arrête pas, le code est compilé en langage machine, hautement optimisé, et caché.

Tu peux cacher l’opcode de PHP moins lent, ou tu peux compiler PHP en C++ puis en langage machine avec HHVM et tu seras presque aussi rapide que Node.

Mais ça n’a pas grand intérêt de comparer ça à mon avis. Pourquoi aurais-tu besoin de pareilles performances ?

+1 -0

Oui, mais au niveau des performances.

Performance de quoi ? Du développeur ? Du code exécuté ? Pour quel type d’application ?

Dans tous les cas comparer un langage (PHP) et un environnement d’exécution (node) n’a pas vraiment de sens.

Ce que veux dire victor est qu’il n’y a rien a apprendre sur node en lui même. Node exécute du JS. Ce qu’il faut apprendre c’est développer des applications JS. Que cette application soit exécutée par node est anecdotique.

Au niveau des performances je vois pas trop l’intérêt de comparer.

Node tourne sur V8 et a des performances ~3x plus élevées que PHP, que ce soit en nombre de "hello world" que tu peux servir en faisant un test de charge ou en terme de temps de réponse pour des tâches CPU intensive. C’est pas surprenant sachant qu’une requête vers une page PHP passe par le serveur web qui demande à PHP d’ouvrir un fichier, de le compiler en bytecode, puis d’interpréter ce bytecode. Node tourne, il s’arrête pas, le code est compilé en langage machine, hautement optimisé, et caché.

Tu peux cacher l’opcode de PHP moins lent, ou tu peux compiler PHP en C++ puis en langage machine avec HHVM et tu seras presque aussi rapide que Node.

Mais ça n’a pas grand intérêt de comparer ça à mon avis. Pourquoi aurais-tu besoin de pareilles performances ?

victor

Je comprends mieux, merci !

Oui, mais au niveau des performances.

Performance de quoi ? Du développeur ? Du code exécuté ? Pour quel type d’application ?

Dans tous les cas comparer un langage (PHP) et un environnement d’exécution (node) n’a pas vraiment de sens.

Ce que veux dire victor est qu’il n’y a rien a apprendre sur node en lui même. Node exécute du JS. Ce qu’il faut apprendre c’est développer des applications JS. Que cette application soit exécutée par node est anecdotique.

Kje

Oui , mais par exemple faire un formulaire de cotnact ? En js c’est pas faisable car on peux pas envoyé notre message à un mail. En Node, il me semble que c’est possible (comme en PHP d’ailleurs, mais juste que je préfère le JS).

C’est possible avec node parce qu’il fait tourner côté serveur, mais du coup ce que tu as à "apprendre" ou découvrir c’est soit la doc de node (= les fonctions qu’il propose) ou un framework web dédié (comme express.js que tu cite).

Oui , mais par exemple faire un formulaire de cotnact ? En js c’est pas faisable car on peux pas envoyé notre message à un mail. En Node, il me semble que c’est possible (comme en PHP d’ailleurs, mais juste que je préfère le JS).

Awoken

Il va quand même te falloir apprendre JavaScript.

+1 -0

Tu peux cacher l’opcode de PHP moins lent, ou tu peux compiler PHP en C++ puis en langage machine avec HHVM et tu seras presque aussi rapide que Node.

php7 est déjà casi aussi rapide que HHVM soit dit en passant.

En js c’est pas faisable car on peux pas envoyé notre message à un mail.

bah si, c’est possible c’est juste que le navigateur n’offre pas cette possibilité. A l’opposé, lorsque tu tournes côté serveur, tu n’as plus les limitations de sécurité du navigateur et tu peux faire tout ce qu’un programme normal peut faire. Il faut comprendre que le JS dans le navigateur c’est un JS dans un contexte très précis : attaché à la fenêtre navigateur, avec un DOM omniprésent et des limites de tous les côtés pour éviter les failles de sécurité.

C’est possible avec node parce qu’il fait tourner côté serveur, mais du coup ce que tu as à "apprendre" ou découvrir c’est soit la doc de node (= les fonctions qu’il propose) ou un framework web dédié (comme express.js que tu cite).

Kje

Je vais me renseigné. Merci en tout cas !

Oui , mais par exemple faire un formulaire de cotnact ? En js c’est pas faisable car on peux pas envoyé notre message à un mail. En Node, il me semble que c’est possible (comme en PHP d’ailleurs, mais juste que je préfère le JS).

Awoken

Il va quand même te falloir apprendre JavaScript.

victor

Le revoir* Pour rattraper mes lacunes :p

Tu peux cacher l’opcode de PHP moins lent, ou tu peux compiler PHP en C++ puis en langage machine avec HHVM et tu seras presque aussi rapide que Node.

php7 est déjà casi aussi rapide que HHVM soit dit en passant.

En js c’est pas faisable car on peux pas envoyé notre message à un mail.

bah si, c’est possible c’est juste que le navigateur n’offre pas cette possibilité. A l’opposé, lorsque tu tournes côté serveur, tu n’as plus les limitations de sécurité du navigateur et tu peux faire tout ce qu’un programme normal peut faire. Il faut comprendre que le JS dans le navigateur c’est un JS dans un contexte très précis : attaché à la fenêtre navigateur, avec un DOM omniprésent et des limites de tous les côtés pour éviter les failles de sécurité.

artragis

Oui, enfin je pensais que js n’avait pas cette possibilité (ce qui me ssemblait bizarre) mais j’ai mieux compris, merci pour ton explication !

Un langage (Turing complet) peut tout faire, théoriquement. Ce n’est pas forcément le langage qui limite mais comment et où il est exécuté. Le JS dans le navigateur ne peut pas envoyer de mail car le navigateur, qui l’exécute, ne te fournit pas de fonctions pour cela. Mais ce n’est pas une limitation du langage. Avec node tu n’auras pas un nouveau mot-clé pour le faire mais des fonctions pour faire ça.

Oui, mais au niveau des performances.

Comparer les performances entre les deux "stacks" n’a quasiment aucun sens. Outre le fait que l’un soit un langage, l’autre un contexte d’exécution

C’est pénible parce que c’est un peu la mode de confondre temps de réponse, scalabilité etc.

Y’a une différence majeure dans le threading model de tous ces nouveaux outils taggés "reactor" / "nio" / "async". Et ça a des implications concrètes en termes de performance et de scalabilité.

C’est surtout vrai dans le monde Java (ou Python, je pense) où l’on peut comparer, sur un même environnement d’exécution (la JVM) les deux approches.

Sur la JVM, on constate par exemple que l’approche 1 thread / 1 req HTTP est parfois plus efficace lorsque le context switch est faible (scalabilité faible) étant donné qu’on bypass tout le scheduling, on gagne quelques pouillèmes de ms. Par contre lors de la montée en charge (donc plein de requêtes en même temps) l’approche "reactor" (single threaded ou multi-reactor, multi-core-threaded, pardon pour l’abus de langage) est nettement plus performante.

Du coup c’est difficile à comparer sans cas d’usage précis.

En plus de ça, il faut bien prendre en considération les avantages et inconvénients des deux solutions (single-threaded vs. 1 thread / HTTP req) dans l’approche de programmation (réactive, asynchrone). Certains trouveront la première (event-loop-based + callbacks et/ou promises et/ou coroutines) plus facile à "raisonner" (pas de race-condition), d’autres trouveront plus simple de se passer de callbacks pour exécuter du code bloquant.

A mon avis c’est un truc à vraiment vraiment prendre en considération quand on passe d’une approche à l’autre (ici PHP vers NodeJS) : il y a le langage, évidemment, le runtime, aussi, mais aussi et surtout le modèle de threading derrière, ça évite de se retrouver avec une event-loop-bloquée-qu’on-comprend-pas-pourquoi.

EDIT : c’est ma réponse aussi à la question de l’OP, parmi les trucs que je considère essentiel dans l’apprentissage de NodeJS, il y a son approche "event-loop" à bien, bien piger. Selon moi c’est un point de passage obligé.

EDIT2 : http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ peut aider.

+2 -0

Ce qui est déroutant avec nodejs c’est peut-être la structure du code et le fonctionnement de require.

Tu as beaucoup de projet avec express, tu peux facilement trouver des exemples.

Parcontre dans d’autres sujets sur le forum, certain avait tendance à déconseiller le PHP parce qu’on trouver de mauvais conseils. Par expérience, des deux langages, je dirais que nodejs c’est pire. On trouve beaucoup de "tuto" copier/coller qui ne font que répéter la même chose/bêtise et très peu avec des informations utiles.

Parcontre dans d’autres sujets sur le forum, certain avait tendance à déconseiller le PHP parce qu’on trouver de mauvais conseils. Par expérience, des deux langages, je dirais que nodejs c’est pire.

A-312

Je confirme. Y’a énormément de conneries et d’articles de très mauvaise qualité à propos de Node, et ça c’est triste. Leur point commun c’est qu’ils sont écrits par des gens qui connaissent pas trop JavaScript. Ça se voit à des kilomètres quand quelqu’un connait mal le langage et s’essaie à donner des conseils à propos d’un framework.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte