[Node.js] - Est-ce que ce langage à un quelconque intérêt ?

Parce qu'il en faut pour tout le monde, discutez ici d'ADA, de shell et autres Wolfram...

Modérateur : Francois

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

[Node.js] - Est-ce que ce langage à un quelconque intérêt ?

Message par Artemus24 » dim. 7 avr. 2019 15:27

Salut à tous.

Connaissant déjà le 'C/C++', le php, le bash, y-a-t-il un intérêt à apprendre ce langage interprété ?
Je vois qu'il y a un engouement pour ce langage, entre autre pour ce qui est de faire du javascript coté serveur.
Je ne me positionne pas en tant que web designer mais plutôt coté électronique.

Si c'est pour faire ce que d'autres langages savent mieux faire, je ne vois pas trop l'intérêt de me disperser dans l'apprentissage de Node.js.

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

destroyedlolo
Raspinaute
Messages : 1585
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: [Node.js]Est-ce que ce langage à un quelconque intérêt ?

Message par destroyedlolo » dim. 7 avr. 2019 22:16

NodeJS est avant tout du javascript ... mais ca n'est pas pour ca qu'il ne sert que du web : ca fait longtemps qu'il s'est émancipé :lol:
Il a l'avantage d'avoir plein de librairies et d'etre relativement propre dans son écriture.

Par contre, pour mon propre usage (mon expérience, pas un regle générale, hein), je suis plutot passé sur Lua comme langage interprété, qui a l'avantage d'avoir une empreinte systèmes réduite par rapport à NodeJS et Python et surtout ... parce que j'avais besoin d'un langage script pouvant être embarqué.
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: [Node.js]Est-ce que ce langage à un quelconque intérêt ?

Message par Artemus24 » lun. 8 avr. 2019 18:56

Salut destroyedlolo.
destroyedlolo a écrit :NodeJS est avant tout du javascript ...
Oui, je le sais que c'est du javascript. Si c'est pour faire du web dynamique, cela ne m'intéresse pas.
C'est remplacé par le HTML 5, avec l'amélioration du CSS, les timers, et autre api.

J'ai fait une recherche sur le net où j'ai trouvé ces phrases :
Le principal objectif de Node.js est de réduire le temps d’exécution des scripts.
Avec un langage interprété, c'est pas ainsi que l'on va gagner du temps à l'exécution. Le mieux est d'utiliser un mangage compilé.
Node.js est également très pratique pour travailler avec des bases de données
Php aussi ! Je ne vois pas où se trouve le plus dans cette affirmation. Perl que je connais aussi a cette capacité.
JavaScript est construit autour de la notion d’événements et fonctionne sous une architecture de code qui est intégralement non bloquante.
On appelle cela le multithreading. Par contre dans un langage interprété, je ne comprends pas trop comment cela se passe.
Node.js fonctionne sous Linux, Mac et Windows.
Il est portable d'un système à l'autre. Oui, mais il y a des tas de langages qui le sont aussi.
Node.js a bien vocation à être utilisé par des applications web scalables.
Encore un terme anglais qui ne veut rien dire du tout.
C'est savoir s'adapter à une monté en charge de l'application.
Il me faudrait des exemples pour comprendre le plus que ce langage peut apporter.
Peut-être un argument commercial ???
destroyedlolo a écrit :Il a l'avantage d'avoir plein de librairies et d'être relativement propre dans son écriture.
Est-ce seulement à cause de cela qu'il est populaire ? Je l'ai utilisé sur ma raspberry, je trouve qu'il est plutôt lent à l'exécution.
Il parait que Node.js sait faire du thread ? Ca me parait bizarre pour un langage interprété.
destroyedlolo a écrit :je suis plutôt passé sur Lua comme langage interprété, qui a l'avantage d'avoir une empreinte systèmes réduite par rapport à NodeJS et Python et surtout ... parce que j'avais besoin d'un langage script pouvant être embarqué.
Ça existe des langages interprétés pour être embarqués ???
Il faut s'adjoindre une bibliothèque, ce qui va prendre de la place sur la carte.
Je ne sais quoi penser de ce langage pour l'instant.

Javascript est en perte de vitesse dans les sites web.
Je veux bien voir un plus (Node.js) pour ce qui est du web dynamique, comme jadis avec jquery.
Mais maintenant, le HTML 5 qui a supplanté tout ça.

Je veux bien que l'on utilise Node.js pour apprendre l'électronique.
A mon avis, le temps réel, l'occupation CPU, la taille du programme sont importants, à cause de la place disponible et de la faible consommation de ces cartes embarqués.
Et je ne parle même pas de la fiabilité qui doit être à l'épreuve d'une quelconque défaillance.
Même si je comprends le coté pédagogique, je ne vois pas trop l'intérêt coté système.

Je pense que la plupart des didacticiels sont orientés vers l'électronique au détriment de ce que l'on peut faire en informatique.
Je prends comme exemple "faire clignoter une led".
Le sujet est pourtant simple, en apparence, et l'on voit des tas de didacticiels donner une solution qui vont induire en erreur les débutants.
Je pense à la monopolisation de la CPU ! Et il n'y a pas que ça.
Tout ce que j'ai pu voir, démontre la méconnaissance de la programmation multithreading.
Pas de thread, timer, mutex, section critique, sémaphore, socket et autres fonctionnalités.
Faire de l'électronique, c'est faire de la programmation système avec une contrainte de taille, celle des cartes embarquées.

C'est pourquoi mon étonnement pour ce langage qui ne s'y prête pas du tout.

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

destroyedlolo
Raspinaute
Messages : 1585
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: [Node.js]Est-ce que ce langage à un quelconque intérêt ?

Message par destroyedlolo » lun. 8 avr. 2019 22:20

Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Le principal objectif de Node.js est de réduire le temps d’exécution des scripts.
Avec un langage interprété, c'est pas ainsi que l'on va gagner du temps à l'exécution. Le mieux est d'utiliser un mangage compilé.
Je pense qu'ils comparaient par rapport a d'autres langages compilés. En particulier Bash qui tient plus de l'ogre quand à la préservation des ressources système vu que quasiment toutes les commandes sont fork()ées.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
JavaScript est construit autour de la notion d’événements et fonctionne sous une architecture de code qui est intégralement non bloquante.
On appelle cela le multithreading.
Pas uniquement : ce sont les événements qui arrivent qui créent de nouveaux threads et non ta propre boucle principale comme par exemple en C.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Node.js a bien vocation à être utilisé par des applications web scalables.
Encore un terme anglais qui ne veut rien dire du tout.
C'est savoir s'adapter à une monté en charge de l'application.
Hormis le bla bla commercial comme tu dis, ca signifie seulement que comme l'applie est événementielle, elle s'adapte d'elle-même à la charge. En clair, pas de pile fixe d'évenements concurrents comme sous l'OS générateurs d'écran bleu.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
destroyedlolo a écrit :Il a l'avantage d'avoir plein de librairies et d'être relativement propre dans son écriture.
Est-ce seulement à cause de cela qu'il est populaire ? Je l'ai utilisé sur ma raspberry, je trouve qu'il est plutôt lent à l'exécution.
???? ca n'a pas de rapport. Je n'ai pas testé (à nouveau car Lua est meilleurs la dessus aussi), mais je pense sans trop me tromper qu'il doit etre plus rapide que Python. Ensuite, il faut séparer le temps d'initialisation et les perfs a l'execution à l'instar de Java.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
destroyedlolo a écrit :je suis plutôt passé sur Lua comme langage interprété, qui a l'avantage d'avoir une empreinte systèmes réduite par rapport à NodeJS et Python et surtout ... parce que j'avais besoin d'un langage script pouvant être embarqué.
Ça existe des langages interprétés pour être embarqués ???
Il faut s'adjoindre une bibliothèque, ce qui va prendre de la place sur la carte.
Ben regarde du coté de NodeMCU sur les ESP :)
Mais je parlais ici d'embarquer dans d'autres programmes plus gros.

Je suis en train de jouer (lentement mais sûrement car je n'ai pas beaucoup de temps à y consacrer, surtout pendant la saison de ski) sur un ordonnanceur.
La partie bas niveau est écrite en C++ : gestion des threads, des événements - timer, messages MQTT, échange inter-thread avec arbitrage (sémaphore, mutex, et autre joyeusetés) ... -
A chaque événement, un thread est lancé qui execute un code Lua.

L'avantage est que le bas niveau est très rapide et proche de l'OS, alors que les fonctions utilisateurs sont en langage interprété donc facilement maintenable et cache "tout le gras". Niveau archi, ca me permet aussi de bien séparer ce qui est "socle technique" de l'applicatif utilisateur.

Ce qui va répondre aussi à ta question
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Il parait que Node.js sait faire du thread ? Ca me parait bizarre pour un langage interprété.
Le code de l'interpréteur Lua est réentrant (une fois en mémoire, exécuté autant de fois que nécessaire). Lors qu'un événement arrive, mon C++ :
  1. crée un nouveau thread
  2. crée un nouveau context Lua
  3. y place d'éventuels paramètres
  4. lance l'interprétation du code Lua correspondant
Bref, toute ma domotique tourne avec des démons de ce genre (à la mode micro service).
Simple, efficace, facilement maintenable et évolutif ("scalable" :lol:) dans le sens où je peux rajouter/enlever/modifier sans que ca ne change quoi que soit dans le reste du systeme. Pour parler plus clairement, j'ai aussi des sondes qui ne fonctionnent que de temps en temps (température piscine, poulailler, ...) : qu'elles soient la ou pas ne change rien. Idem avec les tableaux de bords : que j'en ai un ou 15, ca ne change rien ... ça n'aurait pas été le cas si j'avais utiliser un site web pour ca.

Si tu veux voir ce que ca donne, le code est là.
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: [Node.js]Est-ce que ce langage à un quelconque intérêt ?

Message par Bud Spencer » mar. 9 avr. 2019 00:44

Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Oui, je le sais que c'est du javascript. Si c'est pour faire du web dynamique, cela ne m'intéresse pas.
C'est remplacé par le HTML 5, avec l'amélioration du CSS, les timers, et autre api.
Non ! NodeJS ne fait pas de web dynamique. C'est le client qui est avant tout dynamique ou pas et quand on parle de web, NodeJs n'est que serveur. Faux complet, rien de ce que peut faire NodeJS ne peut etre fait avec de HTML5 ou du css. Comparé de l’HTML5 ou du css avec NodeJs, c’est comme comparé un saucisson avec une porte de garage et ça n’a aucun sens. HTML5 c'est uniquement coté client et sans code JavaScript ca ne sert a rien(ou a pas grand chose) et css n'est qu'un moyen de décoration. En revanche NodeJS est très performant pour développer des appli web self hosted et son concept lui permet d’interagir en temps reel et multilatéralement avec tous ses clients. Ceci dit, avec NodeJS tu peux aussi faire des applications console ou des services qui utilisent n'importe quel protocole réseaux voir meme qui ne sont connectés a rien du tout.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
J'ai fait une recherche sur le net où j'ai trouvé ces phrases :
Le principal objectif de Node.js est de réduire le temps d’exécution des scripts.
Avec un langage interprété, c'est pas ainsi que l'on va gagner du temps à l'exécution. Le mieux est d'utiliser un mangage compilé.
Encore perdu ! NodeSj n’est pas un interpréteur mais un compilateur jit ce qui fait une énorme différence. Réduire le temps d'exécution des scripts, c'est tout a fait acceptable et ce sera d'autant plus vrai que le script aura beaucoup de chose à faire en io. Tout simplement parce que NodeJS est capable de traiter une multitude de taches différentes dans un meme thread en exploitant chaque temps d'attente des io pour faire autre chose alors que des méthodes synchrone (en c, c++,php ou tout ce que tu eux d'autre) sont bloquantes à chaque attente. C'est ca la force et la particularité de NodeJS et aucun des langage que tu utilises ne fait ca.

Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Node.js est également très pratique pour travailler avec des bases de données
Php aussi ! Je ne vois pas où se trouve le plus dans cette affirmation. Perl que je connais aussi a cette capacité.
Essais simplement de remonter l’event d’un trigger ou d’une sp en temps réel à tous les clients connectés en utilisant du php ou du pearl. Tu vas vite la voir la différence. Ajoute a ca que NodeJs exploitera tous les temps de latence de la liaison avec le sgdb, alors que du php ou du pearl ne fera rien en attendant et ce sera du temps perdu.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
On appelle cela le multithreading. Par contre dans un langage interprété, je ne comprends pas trop comment cela se passe.
Perdu encore ! et on y arrive et c'est la toute la philosophie de Nodejs. Il est monothread et nativement asynchrone donc il n'as pas besoin de créer autant de thread que de besoins simultanés, il fait tout ca naturellement dans un seul thread (étonnant non , …). Cerise sur le gâteau, NodeJs permet aussi de faire du multiprocessing et du load balancing en seulement quelques lignes de code. Pour en avoir fait en c++ pendant quelques annés je peux te dire que c'est un sacré merdier à gérer.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Node.js fonctionne sous Linux, Mac et Windows.
Il est portable d'un système à l'autre. Oui, mais il y a des tas de langages qui le sont aussi.
En c ou c++ , autant de compilation que de systèmes ciblés et obligatoirement avec des évaluations écrites dans le code. Avec nodeJS rien de tout ça puisque c’est un jit et que comme tous les jit, compile tout seul pour le système qui l’héberge. Autre bonne nouvelle, il fonctionne en sidebyside, donc il ni a meme pas les problèmes de liaison avec les dépendances ...
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Node.js a bien vocation à être utilisé par des applications web scalables.
Encore un terme anglais qui ne veut rien dire du tout.

La scalabilité c'est la capacité qu'a ton programme a accuser de la charge sans broncher, ou en tous cas, le moins possible. L'exemple des latences de connexion a un sgdb en est un. D'un coté tu as ton code php qui va finir par s'effondrer sous les demandes parce qu'il perd beaucoup de temps a attendre à cause des latences et de l'autre, tu as ton code en NodeJS qui va profiter de ces latence pour continuer à bosser sans s'effondrer. Faire du multiprocess ou du multithreading n'est pas par définition vraiment scalable puisque tu est de toutes façon obligé de limiter le nombre de thread ou de process pour ne pas que ton système s'effondre (bon avec un pi qui 1 ou 2 clients simultanés, pas trop risques hein …). Autre aspet de la scalabilité, c'est la faculté que ton programme a à recevoir de nouvelles fonctions sans altérer ses performances (ou le moins possible en tous cas) et pour ca, NodeJS est excelent. Autres faculté à connaitre meme si tu ne veux pas faire de web, avec NodeJS tu peux facilement déporter du traitement coté client pour soulager le serveur ou l'inverse et tout ca avec exactement le meme code.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
destroyedlolo a écrit :Il a l'avantage d'avoir plein de librairies et d'être relativement propre dans son écriture.
Est-ce seulement à cause de cela qu'il est populaire ? Je l'ai utilisé sur ma raspberry, je trouve qu'il est plutôt lent à l'exécution.

Lent par rapport a quoi et pourquoi faire ?
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Javascript est en perte de vitesse dans les sites web.
Tu plaisantes ? JavaScript est de plus en plus présent et évolue plus que n'importe quel autre langage. Il est meme devenue totalement indispensable.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Je veux bien voir un plus (Node.js) pour ce qui est du web dynamique, comme jadis avec jquery.
Mais maintenant, le HTML 5 qui a supplanté tout ça.

Encore perdu (décidément …). JQuery est juste un framwork de simplification de codage javascript. Tu peux l'utiliser avec Nodejs .. ou pas mais l'un ne peut pas remplacer l'autre. Pour ce qui concerne HTML5, comme déjà dit, ca n'a rien à voir non plus
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Je veux bien que l'on utilise Node.js pour apprendre l'électronique.
A mon avis, le temps réel, l'occupation CPU, la taille du programme sont importants, à cause de la place disponible et de la faible consommation de ces cartes embarqués.
Et je ne parle même pas de la fiabilité qui doit être à l'épreuve d'une quelconque défaillance.
Même si je comprends le coté pédagogique, je ne vois pas trop l'intérêt coté système.
La taille du programme et l'occupation cpu important ? par rapport a quoi et pourquoi faire ?
J'ai développé il y à 2 ans une domotique temps réel qui couvre pas loin de 1000 m² d''openspace et qui a plus de 400 points de terminaisons (lampes, stores, skydome, ventillo convecteur multivitesse, système de chaufferie géothermique, détection de présence …) et ca tourne h24/j365 depuis avec une centaine de clients pc, tablette et smartphone quotidiens. La partie NodeJS est juste un service hébergé sur un vm Windows xp sp2 qui a seulement 512 Mo de ram et qui héberge en plus un serveur opc. Le tout codé et mis en prod en moins de 3 jours… Le précédent système était une usine a gaz en php + cgi c++ coté serveur et de l'ajax coté client pour que ca ait l'air vivant et ca m'avait pris plus d'un mois de boulot.
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Je prends comme exemple "faire clignoter une led".
Le sujet est pourtant simple, en apparence, et l'on voit des tas de didacticiels donner une solution qui vont induire en erreur les débutants.
Je pense à la monopolisation de la CPU ! Et il n'y a pas que ça.
Tout ce que j'ai pu voir, démontre la méconnaissance de la programmation multithreading.
Pas de thread, timer, mutex, section critique, sémaphore, socket et autres fonctionnalités.
https://www.framboise314.fr/penser-thre ... rogrammes/
Tu veux faire clignoter 10 leds a des fréquence différentes en c++ = 10 threads. NodeJs fait ca dans un seul thread sans mutex, sans sémaphores, sans socket … en fait sans rien du tout et avec facilement 10 fois moins de code. C'est justement la un des intérêt de NodeJS. Gérer proprement du multithreading en c++ n'est pas a la porté d'un débutant alors que ce genre de chose est très facile a faire avec NodeJS
Artemus24 a écrit :
lun. 8 avr. 2019 18:56
Faire de l'électronique, c'est faire de la programmation système avec une contrainte de taille, celle des cartes embarquées.
Parce que tu crois que monter un proxy cgi sur un pi pour faire de la page statiques ou meme juste de l'api en php ne va pas à l'encontre du bon sens d'après toi ? Si il ni avait que ca, ok, on devrait faire avec, mais pratiquer ces méthodes et dire que nodejs est gourmand en quoi que soit, c'est du grand n'importe quoi. Meme si on ne veux pas utiliser Nodejs, il y a plein d'autres solutions qui permettent de faire du self hosted qui sera toujours beaucoup plus adapté a de l'embarqué. Après, Nodejs n'est pas non plus une solution bonne pour tout. Si par exemple tu veux développer de l'algo de calcul itératif ou de l'appli desktop ou de l'acquisition sur un dac, c'est clair que ce n'est pas un bon choix et la, autant rester en c++. Par contre, si tu veux vouloir interagir en reseau (oupas) et temps réel avec l'électronique de ton PI, tu vas avoir du mal a trouver mieu. Ajoute a ca que tu peux très bien coder tes propres package pour NodeJS et les compiler en c++.

Artemus24 a écrit :
lun. 8 avr. 2019 18:56
C'est pourquoi mon étonnement pour ce langage qui ne s'y prête pas du tout.
Visiblement, tu prevois juste de débuter en éléctronique (et je t'en felicite, tu vas voir, c'est génial), et tu ne connais absolument rien de NodeJS. Comment peut tu prétendres que NodeJS ne se prete pas a l'électronique ? Va voir l'exemple du datalogger que j'ai mis dans le tuto des app dynamique. Je ne parle pas de la page web qui est juste de la broderie, mais simplment des possibilités d'interaction entre les composants et des clients réseaux (quel que soit le protocole d'echange, on s'en fout). Ca m'avait pris 2 ou 3 heures avec NodeJS. Combien de temps penses tu qu'il te faudrait pour arriver au meme résultat (si tu y arrives…) avec n'importe lequel des langages que tu utilises ?

Pour répondre a ta question si il y a un intérêt a apprendre NodeJS, c'est a toi de juger pour toi . Je te dirais juste que si vraiment tu maitrises le c, le c++ et le php, il ni a pas grand chose a apprendre de plus syntaxiquement. Le plus gros à faire, c'est de te familiariser avec son asynchronisme, c'est tout.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: [Node.js]Est-ce que ce langage à un quelconque intérêt ?

Message par Artemus24 » mar. 9 avr. 2019 17:08

Salut à tous.

Désolé pour mes erreurs concernant le web dynamique alors que je savais que Node.js est coté serveur.
Mais quand on parle javascript, j'ai tendance à voir cela coté client.
destroyedlolo a écrit :Le code de l'interpréteur Lua est réentrant (une fois en mémoire, exécuté autant de fois que nécessaire).
La réentrance, c'est comme sur les gros systèmes IBM.
D'une part, il y a séparation entre la partie consacrée aux données et la partie instruction (l'exécutable).
D'autre part, on ne charge qu'une seule fois l'exécutable, mais autant de parties consacrées aux données qu'il y a de tâches ou d'instance comme on dit maintenant.
Bud Spencer a écrit :NodeSj n’est pas un interpréteur mais un compilateur jit ce qui fait une énorme différence.
JIT = just-in-time ou la compilation à la volée.
Bytecode = code intermédiaire entre les instructions machines et le code source, qui n'est pas directement exécutable.

D'accord, je comprends mieux. En fait, il y a compilation dans un pseudo langage et celui-ci est interprété puis exécuté.
Je connaissais ce principe qui a été élaboré pour la première fois avec le langage pascal.
En effet, le source est compilé dans un pseudo code, qui lui-même sera interprété sur la machine.
Et il est portable d'une machine à une autre car il n'y a que l'interpréteur à réécrire.
Bud Spencer a écrit :NodeJS est capable de traiter une multitude de taches différentes dans un même thread
Un thread, c'est une tâche en français.
Vous vouliez certainement dire, "NodeJS est capable de traiter une multitude de tâches différentes dans un même processus".
Bud Spencer a écrit :des méthodes synchrone (en c, c++,php ou tout ce que tu eux d'autre) sont bloquantes à chaque attente. C'est ca la force et la particularité de NodeJS et aucun des langage que tu utilises ne fait ça.
C'est faux car je ne parle pas de méthodes synchrones quand je fais du 'c/c++', mais bien d'asynchrone.
A priori, Node.js n'est pas mieux que la programmation parallèle dite aussi concurrent programming en anglais.
Peut-être que l'écriture d'un programme est plus simple à mettre en oeuvre.
Bud Spencer a écrit :Il est monothread et nativement asynchrone donc il n'as pas besoin de créer autant de thread que de besoins simultanés,
S'il est mono tâche, le seule mode d'exécution est bien le synchrone, car une tâche dépend de la fin d’une autre tâche.
Bud Spencer a écrit :Pour en avoir fait en c++ pendant quelques années je peux te dire que c'est un sacré merdier à gérer.
J'en ai fait aussi, mais pas professionnellement, sous windows, et je n'ai pas trouvé cela si compliqué.
Il fait juste créer un moniteur, pour s'organiser autour de la gestion des tâches.
Pour ce faire, j'ai utilisé la technique du râteau, qui consiste à attendre la fin d'une multitude de tâche, pour entreprendre la suite.
Comme par exemple découper un calcul en sous-calcul et attendre la fin de ceux-ci pour faire la synthèse.
Bud Spencer a écrit :La scalabilité c'est la capacité qu'a ton programme a accuser de la charge sans broncher, ou en tous cas, le moins possible.
Normalement, c'est le système d'exploitation qui gère la pile des demandes, et doit donc être capable de faire du multithreading.
Par contre, pour éviter le goulot d'étranglement, voire le débordement de la pile, c'est l'application qui doit gérer cela.
Dans mon moniteur, je gérais le nombre de tâches qui devait s'exécuter ou être en attente, par l'usage des sémaphores.
Bud Spencer a écrit :L'exemple des latences de connexion a un sgdb en est un.
Il y a un goulot d'étranglement dans la gestion d'un SGBD.
Cela se traduit par "transaction-isolation = SERIALIZABLE" en MySql qui oblige de faire passer les requêtes les unes après les autres.
Cela dépend aussi comment le SGBD sait gérer ces concurrences. Ce n'est pas le cas de MySql, mais c'est le cas de Microsoft SQL Server.
Si c'est le cas alors oui, on peut avoir des traitements parallèles puisque les accès ne se font pas sur des "sections critiques".
Donc non, cela n'a rien à voir avec Node.js puisque le problème se situe dans le SGBD.
Bud Spencer a écrit :Faire du multiprocess ou du multithreading n'est pas par définition vraiment scalable puisque tu es de toutes façon obligé de limiter le nombre de thread ou de process pour ne pas que ton système s'effondre
C'est le cas de n'importe quel système d'exploitation puisque ceux-ci font du multithreading. En ces termes, le node.js ne peut pas être scalable.
Bud Spencer a écrit :Lent par rapport a quoi et pourquoi faire ?
J'ai fait un petit programme en 'C/C++' et un autre en Node.js qui font exactement la même chose.
Comparativement, le Node.js est beaucoup plus lent sur ma raspberry, peut-être à cause de la phase de démarrage.
Bud Spencer a écrit :Tu plaisantes ?
Pas du tout. Je parle du langage javascript, pas des autres framework qui reposent sur du javascript.
Même si le jquery repose sur du javascript, ce n'est pas pour autant du javascript puisque la syntaxe est différente.

--> Penser ‘Thread’ pour simplifier vos programmes
J'ai vu votre excellent billet, en réponse de ce que vous aviez dit dans cet autre billet :
--> La Saga Blink : Un Raspberry pour faire clignoter une LED !
Bud Spencer a écrit :Gérer proprement du multithreading en c++ n'est pas a la porté d'un débutant alors que ce genre de chose est très facile a faire avec NodeJS
J'aurai aimé voir votre version Node.js afin de le comparer avec l'exemple donné par "Patrice SEIBEL".
Bud Spencer a écrit :dire que nodejs est gourmand en quoi que soit, c'est du grand n'importe quoi
Je n'ai pas dit qu'il était gourmand mais lent. Et comme il est asynchrone, il n'est pas temps réel.
Bud Spencer a écrit :Visiblement, tu prévois juste de débuter en électronique (et je t'en félicite, tu vas voir, c'est génial), et tu ne connais absolument rien de NodeJS.
Je ne connais strictement rien en électronique et encore moins dans le langage Node.js.
J'ai fait un peu de Javascript dans le cadre du HTML dynamique, et c'est vrai, je n'ai pas du tout aimé ce langage.
Bud Spencer a écrit :Comment peux-tu prétendre que NodeJS ne se prête pas a l'électronique ?
Je n'ai pas dit cela. Je me pose simplement la question de la pertinence du choix de Node.js, que je ne connais pas, par rapport à un langage que je connais comme le 'C/C++' pour faire de l’électronique.
Bud Spencer a écrit :Va voir l'exemple du datalogger que j'ai mis dans le tuto des app dynamique.
Je l'ai déjà lu ! Et c'est vrai que ce sujet est fort intéressant.
Bud Spencer a écrit :Ca m'avait pris 2 ou 3 heures avec NodeJS. Combien de temps penses tu qu'il te faudrait pour arriver au meme résultat (si tu y arrives…) avec n'importe lequel des langages que tu utilises ?
Plus de temps certainement mais le problème, selon moi, n'est pas une question de temps mais de maîtrise de ce je désire entreprendre.
Comme je ne connais pas le langage Node.js, cela me sera plus pénible que de faire du 'C/C++'.
Bud Spencer a écrit :Pour répondre a ta question si il y a un intérêt à apprendre NodeJS, c'est a toi de juger pour toi.
Tu aurais dû commencer par là, l'intérêt de ce langage dans l'électronique.
Pour reprendre les propos de destroyedlolo, doit-je me concentrer sur Node.js ou bien sur LUA dans le cadre électronique, bien sûr ?
Bud Spencer a écrit :Je te dirais juste que si vraiment tu maîtrises le c, le c++ et le php, il n'y a pas grand chose à apprendre de plus syntaxiquement.
C'est déjà un point positif !
Bud Spencer a écrit :Le plus gros à faire, c'est de te familiariser avec son asynchronisme, c'est tout.
Tu voulais dire me familiariser avec la logique de l'écriture des programmes en Node.js.

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

destroyedlolo
Raspinaute
Messages : 1585
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: [Node.js]Est-ce que ce langage à un quelconque intérêt ?

Message par destroyedlolo » mar. 9 avr. 2019 18:22

Salut,
Artemus24 a écrit :
mar. 9 avr. 2019 17:08
JIT = just-in-time ou la compilation à la volée.
Bytecode = code intermédiaire entre les instructions machines et le code source, qui n'est pas directement exécutable.

D'accord, je comprends mieux. En fait, il y a compilation dans un pseudo langage et celui-ci est interprété puis exécuté.
Je connaissais ce principe qui a été élaboré pour la première fois avec le langage pascal.
En effet, le source est compilé dans un pseudo code, qui lui-même sera interprété sur la machine.
Et il est portable d'une machine à une autre car il n'y a que l'interpréteur à réécrire.
Non : JIT signifie généralement qu'il convertis le code en binaire natif comme le ferait un compilo C.
Mais contrairement au dit compilo C, il le fait soit à la volé (au moment ou le code est atteinds), soit au lancement.
Artemus24 a écrit :
mar. 9 avr. 2019 17:08
J'ai fait un peu de Javascript dans le cadre du HTML dynamique, et c'est vrai, je n'ai pas du tout aimé ce langage.
C'est peut etre la qu'est le pb :)
Artemus24 a écrit :
mar. 9 avr. 2019 17:08
Pour reprendre les propos de destroyedlolo, doit-je me concentrer sur Node.js ou bien sur LUA dans le cadre électronique, bien sûr ?
Haaaaaa, mais je n'ai jamais dit ca : j'ai juste dit que dans mon cas particulier ou je voulais de la legerté et l'embarqué dans un truc en C++, il s'est imposé de lui même.
Le fait qu'il soit largement plus léger que tous ses concurrents que j'ai testé a jouer aussi.

De mon point de vue, c'est a toi de voir ce que tu chercher : te mettre a l'électronique ou te mettre à un nouveau langage ?
Malgrés une idée répendu chez les gens qui utilisent les *PI, ont peut très bien utiliser les GPIO uniquement en utilisant sysfs et non les librairies comme wiringPI. Après, c'est sur que lorsqu'on tape dans des circuits plus complexe il faut un driver approprier, mais pas besoin de sortir la grosse berta pour faire clignoté une LED.
Pour les circuits plus compliqués, a partir du moment ou ils sont exposés dans des FS (par exemple OWFS pour le 1-wire), n'importe quel langage est utilisables.

Perso, NodeJS est un très bon langage et je l'utilise dans d'autres domaines.
Python aura l'avantage d'avoir des tonne de tuto au risque de devenir bruillant mais il est lourdingue niveau ressources systeme et j'aime pas sa syntaxe.
C++ + Lua a été MON choix pour MON besoin, et a prouvé depuis le temps que je bosse sur mon projet que c'était un choix pertinent pour MON usage :)

A+
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

dyox
Raspinaute
Messages : 969
Enregistré le : dim. 28 déc. 2014 15:28
Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe

Re: [Node.js]Est-ce que ce langage à un quelconque intérêt ?

Message par dyox » mar. 9 avr. 2019 18:46

Artemus24, il y a un cours sur OpenClassroom si vous êtes intéressé.

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: [Node.js]Est-ce que ce langage à un quelconque intérêt ?

Message par Artemus24 » mar. 9 avr. 2019 20:25

Salut à tous.
destroyedlolo a écrit :Non : JIT signifie généralement qu'il convertis le code en binaire natif comme le ferait un compilo C.
Je ne connaissais pas le terme JIT. J'ai fait une recherche sur le net et j'ai trouvé ceci :
--> Compilation à la volée

Puis dans la description, j'ai lu :
Dans un système dit bytecode-compilé (anglicisme de bytecode-compiled), le code source est compilé à l'avance ou à la volée (lors de l'exécution) dans une représentation intermédiaire, le bytecode. C'est le cas par exemple des langages Limbo, Smalltalk, Perl, PHP, Python, Ruby, Lua, GNU Common Lisp ou encore Java, entre autres. Le bytecode n'est pas un code machine, c'est-à-dire que ce n'est pas un code optimisé pour un type d'architecture d'ordinateur en particulier. On dit du bytecode qu'il est portable entre différentes architectures. Ce bytecode est ensuite interprété ou bien exécuté par une machine virtuelle, pour dans tous les cas, exécuter le programme.
et cela m'a rappelé le langage pascal entre autre la version pascal UCSD qui tournait sur des Apple II+.

Par "compilation à la volée", je comprends juste avant le moment où l'instruction va être exécuté.
C'est différent du Pascal où il y a bien une compilation, comme en 'C/C++'.
La différence est que le pseudo code doit être interprété car celui-ci n'existe pas en tant que tel sur la machine.
N'empêche que même s'il existe une compilation de l'instruction, cela reste quand même plus lent que du 'C/C++'.
En tout cas, merci pour la précision car je ne savais pas que le Node.js utilisant cette technique.
destroyedlolo a écrit :C'est peut être là qu'est le pb :)
C'est pas peut-être, c'est certain.
destroyedlolo a écrit :Haaaaaa, mais je n'ai jamais dit ca
Désolé, j'ai mal compris.
destroyedlolo a écrit :De mon point de vue, c'est à toi de voir ce que tu cherches : te mettre à l'électronique ou te mettre à un nouveau langage ?
Excellente question !

Dans un premier temps, faire mumuse avec mes raspberry et en particulier manipuler le GPIO.
Je recherche des didacticiels pour débutant, où la manipulation du GPIO est au coeur des exercices électroniques.
Entre autre, les leds, les boutons, des moteurs .. et après je verrais.
J'aimerai savoir comment a été écrit "bcm2835.h" afin de comprendre les accès au GPIO puis de les reproduire.

Après cette phase d'apprentissage, je me consacrerai à Node.js. Enfin faut d'abord que je le découvre.
destroyedlolo a écrit :pas besoin de sortir la grosse berta pour faire clignoté une LED.
D'où mon choix sur le Node.js.
Si je peux développer léger, sans perdre la performance et la souplesse du 'C/C++', je suis preneur.
destroyedlolo a écrit :Perso, NodeJS est un très bon langage et je l'utilise dans d'autres domaines.
Cela fait longtemps que j'entends parler de ce langage, entre autre sur le site developpez.
Après tout, cela ne coute rien de m'initier à ce langage.

Python, j'aime pas. Je me pose toujours la question de l'intérêt de ces nouveaux langages.
Quant on connait le 'C/C++', et tout ce qu'il peut apporter, pour se mettre à Python. Idem pour le Perl.
Après, cela dépend du context où tu travailles. Je vais privilégier tel ou tel langage.
dyox a écrit :il y a un cours sur OpenClassroom si vous êtes intéressé.
Merci Dyox, je vais lire ce cours.

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: [Node.js]Est-ce que ce langage à un quelconque intérêt ?

Message par Bud Spencer » mar. 9 avr. 2019 23:18

Artemus24 a écrit :
mar. 9 avr. 2019 17:08
Bud Spencer a écrit :NodeJS est capable de traiter une multitude de taches différentes dans un même thread
Un thread, c'est une tâche en français.
Vous vouliez certainement dire, "NodeJS est capable de traiter une multitude de tâches différentes dans un même processus".
Non non, je voulais bien dire une multitude de taches différentes dans un meme thread. Entendons ici taches comme des opérations ou des procédures distinctes.

Quand je dis que javascript évolue, c’est pareil. Je ne parle des multiples frameworks qui vont autour mais bien des spécification standard. Juste pour rappel, JavaScript est le langage le plus exécuté au monde au quotidien et pour cause, c’est LE langage actif de tous les navigateurs. A la vitesse ou ça avance dans ce domaine tu penses bien que s’il n’évoluait pas il aurait été remplacé depuis longtemps.
Artemus24 a écrit :
mar. 9 avr. 2019 17:08
C'est faux car je ne parle pas de méthodes synchrones quand je fais du 'c/c++', mais bien d'asynchrone.
A priori, Node.js n'est pas mieux que la programmation parallèle dite aussi concurrent programming en anglais.
Et bien tu te trompes lourdement. Que tu fasses du multithreading, du multitasking, du multiprocessing, du parallélisme, tu ne feras toujours que partager du temps processeur(s) entre des taches qui sont SYNCHRONES ce qui n’a absolument rien à voir avec spécificité de NodeJS qui est lui NATIVEMENT ASYNCHRONE et par définition fait exactement l'inverse en partageant son temps LIBRE entre des taches asynchrones.
Artemus24 a écrit :
mar. 9 avr. 2019 17:08
S'il est mono tâche, le seule mode d'exécution est bien le synchrone, car une tâche dépend de la fin d’une autre tâche.
Et bien justement non et c'est la toute la différence et tant que tu n’auras pas compris fondamentalement cette différence, tu ne pourras pas comprendre pourquoi NodeJs est si particulier. Tout le reste étant directement lié a ca, pas besoin d'y apporter de commentaires.

Artemus24 a écrit :
mar. 9 avr. 2019 17:08
J'aurai aimé voir votre version Node.js afin de le comparer avec l'exemple donné par "Patrice SEIBEL".
Pas de problème et comme je suis généreux Je double la mise. Voilà un bout de code tout simple qui faire clignoter 2 leds en meme temps de façon totalement désynchronisé tout en laissant mon programme tourner en meme temps pour faire tout ce qu’il veut d’autre.

Code : Tout sélectionner

var rpio = require('rpio');
rpio.open(12,rpio.OUTPUT,rpio.LOW);
rpio.open(18,rpio.OUTPUT,rpio.LOW);

var blinka = setInterval(function(){rpio.write(12,!rpio.read(led) ? rpio.HIGH : rpio.LOW);},333);
var blinkb = setInterval(function(){rpio.write(18,!rpio.read(led) ? rpio.HIGH : rpio.LOW);},196);

reste du programme …
C’est tout. Pas de multithread, pas de multitask, pas de multiprocessus, pas de paralellisme et pourtant mon code peut faire n’importe quoi d’autre pendant que mes leds clignotent dans LE MEME ET UNIQUE THREAD. Si je passe sur le declaratif, il y seulement 8 (2x4) instructions std javascript (sauf pour l’acces aux gpio évidement, mais tu peux remplacer ca par des stdout si tu veux). A toi de nous montrer comment tu ferais la meme chose en c, c++ ou php. Quand je dis meme chose, ça signifie le faire dans le meme unique thread que celui du programme principale et sans aucun appel bloquant. Avec ca tu vas peut etre comprendre la spécificité et l'intérêt de NodeJS ;)
Artemus24 a écrit :
mar. 9 avr. 2019 17:08
Bud Spencer a écrit :Le plus gros à faire, c'est de te familiariser avec son asynchronisme, c'est tout.
Tu voulais dire me familiariser avec la logique de l'écriture des programmes en Node.js.
Encore ici, je disais exactement ce que je voulais dire. La syntaxe et les methodes d'ecriture, ca c'est comme dans tous les langages et on supose que meme si tu en debutes un tu maitrise le code que tu ecrits. Ce que tu vas devoir apprivoiser ce n'est pas ca mais bien l'asynchronisme fondamental que tu ne connais visiblement pas encore. Si parfois tu te retrouves avec des résulats qui ne te semblent pas cohérant, ce ne sera pas parce que ton code est mal ecrit ou faux, c'est juste que tu aurras raisonner de facon synchrone comme tu l'aurrais fait avec n'importe quel autre langage et ca ne sera pas forcement conforme avec la façon dont NodeJs le traitera. Au début c'est très agaçant, mais quand tu as compris le raisonnement du truc tu le transformes en avantage.

Après tout ca, soyons très clair. Comme je l'ai écrit déja une multitude de fois, aucun langage n'est meilleur qu'un autre et NodeJS ne fait pas exception. Il y a le potentiel du langage, le contexte dans lequel on l'utilise, les besoins et aussi les habitudes que l'on a. En ce qui concerne NodeJS, je pense en avoir fait un vraie démonstration dans le tuto que j'ai écrit. Si vous pensez avoir des methodes plus facile plus belle moins lourde plus rapide ou moins n'importe quoi, arretez d'en parler dans le vide. Faites en concrètement la démonstration comme je l'ai fait et tout le monde en profitera.

ps: tu peux me tutoyer. Des 'vous monsieur', je bouffe toute la journée au boulot et ca me suffit bien. Rassure toi, je ne le prendrais pas pour de la familiarité mais simplement pour de la convivialité.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Répondre

Retourner vers « Autres langages »