Tout d'abord, il s'agit d'un article traduit de TJ's Farewell Node.js. J'ai en effet subi un certain impact après avoir lu cet article, mais je ne suis pas d'accord avec certains opinions de l'auteur. Par exemple, je pense que le registre des packages de Node.js est l'un de ses nombreux avantages, mais GO fait légèrement défaut à cet égard. En raison du niveau personnel, je ne comprends pas beaucoup de choses lors de la traduction. Je suis également allé sur le blog de l'auteur et Stackoverflow pour poser des questions pour obtenir des réponses. Il y a encore beaucoup de choses qui ne sont pas en place dans la traduction, et j'espère avoir un point de vue.
Ps. En tant que débutant Node.js, grâce à TJ pour ses efforts et allez jusqu'au bout.
texte:
Dites au revoir à Node.js
Quitter le royaume nœud.js
Je combat Node.js en production depuis assez longtemps et malheureusement comme je n'ai plus aimé travailler sur ce travail, du moins en ce moment, c'est mon adieu officiel. Plus important encore, j'ai besoin d'un mainteneur.
Le nœud est vraiment génial à certains égards, mais ce n'est pas un outil approprié après tout pour le type de logiciel qui m'intéresse récemment. Je prévois toujours d'utiliser le nœud comme site Web, mais si vous êtes intéressé à maintenir un projet, laissez un message pour noter votre nom d'utilisateur GitHub, votre nom d'utilisateur NPM et votre nom de projet pour me le faire savoir. Habituellement, tout ce que je demande, c'est que vous ne modifiez pas complètement votre API existante. Si vous voulez vraiment le faire, il vaut mieux démarrer un nouveau projet.
KOA est un projet que je continuerai à maintenir. (Avec CO et amis)
L'histoire du Saint Graal
J'ai toujours aimé C, mais tous ceux qui travaillent dans le développement C savent que c'est précieux mais sujet aux erreurs. Il est difficile de prouver le choix du langage dans le travail quotidien, car ce n'est pas exactement le travail le plus rapide. La simplicité est également la raison pour laquelle elle a toujours été louée, mais vous n'iras pas très loin sans beaucoup de modèles.
Alors que de plus en plus de personnes participent au développement de systèmes distribués, la tendance de développement des performances des nœuds sur la convivialité et la robustesse m'a rendu plus frustré. Au cours de la semaine dernière, j'ai réécrit un système distribué relativement important dans GO, qui est robuste, fonctionne mieux et est facile à entretenir et a une meilleure couverture testable en raison de la beauté générale et plus facile à développer un code synchrone.
Je ne dis pas que Go est un Saint Graal, ce n'est pas parfait, mais Go est une excellente réponse pour de nombreuses langues qui existent aujourd'hui. Comme de plus en plus de ces langues de «prochaine génération» comme Rust et Julia trouvent leur propre place et mûrissent, je suis sûr que nous aurons plus de bonnes solutions.
Personnellement, je suis très excité par Go à cause de sa vitesse d'itération, je suis très excité de voir qu'ils sont impatients d'atteindre la version 2.0, et selon les nouvelles que j'ai entendues, ils n'ont pas peur de briser les grandes choses originales. Si c'est vrai, je suis heureux, plus parce que je crois que si cela est vraiment bénéfique pour cette langue, je devrais rapidement décomposer ce qui est déjà là. Mais je ne suis pas non plus un géant du logiciel qui exécute beaucoup de systèmes. :D
Édité par: Je dois avoir mal interprété certaines listes de diffusion de soumission, et ils ne sont pas impatients de faire des changements destructeurs à tout moment. @enneff
Pourquoi y aller?
Si Node fonctionne pour vous et que vous n'avez rien à craindre, c'est toujours un excellent outil. Mais si quelque chose vous dérange, n'oubliez pas de sauter de votre boîte et de voir ce qui est en dehors des sentiers battus - j'ai été attiré par elle dans quelques heures suivant l'utilisation initiale de GO pour construire le produit.
Encore une fois, je ne suis pas là pour dire que Go est certainement la meilleure langue et vous devez aller avec. Mais pour son âge, il est très mature et robuste. (À peu près au même âge que le nœud). La reconstruction de type est amusante et simple, les devoirs et les outils de débogage fournis par GO sont formidables, et la communauté a des réglementations très solides sur la documentation, les formats, les références et la conception d'API.
Tout en étant si habitué au nœud extrêmement modulaire et en ayant expérimenté la bibliothèque standard pourrie de Ruby, lorsque j'ai entendu parler de Go pour la première fois, je pensais que sa bibliothèque standard était horrible. Après avoir plongé dans cette langue, j'ai réalisé que la plupart des bibliothèques standard sont nécessaires à ce stade, telles que la compression, JSON, IO, IO tamponnée, les opérations de chaîne, etc. La plupart de ces API sont bien définies et puissantes. Il est facile d'écrire l'intégralité du programme simplement en utilisant ces bibliothèques standard.
Packages tiers go
La plupart des bibliothèques GO semblent similaires, la plupart du code tiers que j'ai utilisé jusqu'à présent est de haute qualité, et il est difficile de les trouver dans Node car JavaScript attire les développeurs à différents niveaux de compétence.
Il n'y a pas de registre pour les packages GO, vous verrez donc généralement 5 ou 6 mêmes packages en même temps. À un moment donné, cela peut provoquer une certaine confusion, mais il a un effet secondaire intéressant, et vous devez décider lequel est la meilleure option en examinant soigneusement chaque package. Grâce à Node, il existe généralement des packages de spécification tels que "redis", "MongoDB-Native" ou "Zeromq", donc vous vous arrêtera là et en déduirez qu'ils sont les meilleurs.
Si vous effectuez un travail distribué, vous trouverez que les types de données sous-jacents concurrents de Go de Go sont très utiles. Nous pouvons obtenir quelque chose de similaire par les générateurs dans le nœud, mais à mon avis, les générateurs ne sont à moitié terminés. Sans gestion des erreurs indépendantes, la pile de rapports est toujours ordinaire même si elle est la meilleure. Lorsque ces solutions fonctionnent bien, je ne veux pas attendre que la communauté se réorganise pendant trois ans.
À mon avis, la gestion des erreurs de Go est exceptionnelle. Le nœud est génial en termes de ce que vous devez penser à chaque erreur et décider comment le faire. Cependant, le nœud échoue:
Vous pourriez répéter le rappel
Vous ne pouvez pas du tout faire un rappel et vous perdre dans un état instable (par exemple, oubliez de passer une erreur pour gérer le rappel. Lorsqu'une erreur se produit, le nœud avalera l'erreur sans aucune rétroaction)
Vous pourriez obtenir l'erreur à emporter
Les émetteurs peuvent obtenir plusieurs mauvais événements
J'ai oublié le mauvais événement pour y faire face
Souvent, je ne sais pas ce qui est nécessaire pour gérer les erreurs
La gestion des erreurs est très redondante
Le rappel est terrible
En Go, lorsque mon code se termine, il se termine et vous ne pouvez pas le réexécuter dans une instruction. Ceci est incertain dans le nœud. Vous penserez qu'un programme est entièrement exécuté jusqu'à ce qu'une bibliothèque appelle de manière inattendue un rappel plusieurs fois, ou n'effacer pas correctement les gestionnaires, puis provoque l'exécution du code. Il est assez difficile de trouver ces raisons dans le code de production réel, pourquoi s'en soucier? D'autres langues ne vous laisseront pas ressentir ces douleurs.
Le nœud du futur
J'espère toujours que Node fait du bon travail, beaucoup de gens investissent énormément en lui, et cela a ce potentiel. Je pense que Joyent et l'équipe doivent se concentrer sur la convivialité - si votre application est fragile et difficile à déboguer, à refactor et à développer, les performances sont dénuées de sens.
En 4 à 5 ans, nous aurons toujours cette vague erreur "Erreur: getaddrinfo eaddrinfo", et ce fait nous indique où se trouvent les priorités de développement du nœud. Naturellement, lorsque vous vous concentrez sur la construction du cœur du système, il est facile de manquer ces choses. Je pense que les utilisateurs ont exprimé leurs opinions sur de telles choses encore et encore, mais n'ont vu aucun résultat. Nous obtenons généralement quelques réponses pour affirmer que ce que nous avons est déjà parfait. En pratique, ce n'est pas le cas.
Les flux sont interrompus, les rappels ne sont pas faciles à utiliser, les erreurs ne sont pas claires, les outils ne sont pas faciles à utiliser, les réglementations communautaires existent, mais elles semblent manquantes par rapport à Go. Malgré cela, je peux continuer à utiliser le nœud pour certaines tâches spécifiques, telles que la création de pages Web, ou certaines API ou prototypes fragmentés. Si le nœud peut résoudre certains de ses problèmes fondamentaux, il a une chance de rester pertinent, mais lorsqu'il existe une autre solution qui fonctionne plus élevé que la disponibilité lorsque des performances plus élevées et des arguments de disponibilité plus élevés ne vont pas trop loin.
Si la communauté du nœud décide d'embrasser des générateurs et de les mettre en œuvre dans un nœud très central et de passer des erreurs de manière appropriée, il est possible de rendre cela référentif. Cela améliorera complètement la convivialité et la robustesse du nœud.
La bonne nouvelle est que j'ai parlé à un gars formidable et talentueux qui a contribué le code de base à Strongloop il n'y a pas longtemps. Ils adoptent explicitement la bonne façon de résoudre ces problèmes pour rendre les futurs nœuds plus faciles à travailler en écoutant les réponses des développeurs à la plate-forme et en prévoyant de trouver la bonne façon de résoudre ces problèmes. Je ne sais pas comment le conflit entre plusieurs sociétés sur le développement simultané de la partie principale se terminera, mais j'espère que le conducteur du développeur gagnera.
Cela ne signifie pas que c'est une attaque contre les individus, beaucoup de gens vraiment talentueux travaillent avec ou sur le nœud, mais ce n'est plus quelque chose qui m'intéresse. J'ai passé un bon moment dans la communauté des nœuds et j'ai rencontré des gens vraiment intéressants.
Le sens de l'histoire est que vous ne devez pas être limité par votre propre cercle! Voyez quoi ailleurs et vous pourriez profiter de la programmation à nouveau. Il existe de nombreuses solutions incroyables en dehors de cela, et l'erreur que j'ai commise est que j'ai attendu trop longtemps pour jouer avec eux!