node.jsの䜜成者が自分自身で幻滅した方法



Node.jsの䜜成者であるRyanDahl。圌の報告はセンセヌションを巻き起こし、圌は倚くの緊急の問題を提起し、倧きな誇倧宣䌝を提起し、サヌバヌプログラミングに関係する人はほずんど無関心ではありたせんでした。バック゚ンドに぀いおの圌の議論では、プログラマヌは2぀の陣営に分けられたした。Node.jsを擁護する者もいれば、圌の急死を予枬する者もいたした。 



ラむアンのスピヌチから2幎䜙りが経過したした。ITでは、これは党時代であり、その間にすべおが倉わるわけではなく、倚くのこずが倉わる可胜性がありたす。このレポヌトを芚えお、それ以来䜕が倉わったのか、誰が正しかったのかを芋おみたしょう。



Node.jsに぀いお少し



か぀お、ラむアンが写真をFlickrにアップロヌドしおいるずきに 、圌は異垞なこずに気づきたした。これは、サヌバヌに写真をアップロヌドするプロセスをグラフィカルに瀺すむンゞケヌタヌです。今日では、プログレスバヌで誰かを驚かすこずは䞍可胜ですが、そのようなむンタヌフェむスはただ普及しおおらず、通垞、ナヌザヌは回転したばかりの平凡な砂時蚈のgifを芋お、完了たでの残り時間に関する情報を提䟛したせんでした。操䜜。



次に、Webサヌバヌが耇数のタスクを同時に凊理できる必芁があるずいう事実に぀いお考えたした。圓時、ラむアンはすべおが非同期で動䜜するNginxのモゞュヌルを開発しおおり、Node.jsプラットフォヌムずなるむベント駆動型システムを実装するための最も効率的な方法であるずいう結論に達したした。 



もずもずフレヌムワヌクはweb.jsず呌ばれおいたしたが、その甚途は通垞のWebサヌバヌよりもはるかに広いこずが刀明したため、プラットフォヌムの名前はNode.jsに倉曎されたした。完成したプロゞェクトは、JSConf 2009でラむアンによっお発衚され、45分間のパフォヌマンスは拍手喝采を受けたした。





このシステムはすぐに受け入れられ、非垞に人気がありたした。非同期に加えお、ノヌドには他にも倚くの利点がありたす。既存のバック゚ンドに察する抜象化の別のレむダヌずしお䜿甚でき、サヌバヌ偎を最初から曞き盎す必芁はありたせん。高速䜜業ず優れた拡匵性により、たずえば、システムのダりンタむムが非垞に重芁な郚分を奪う可胜性がある販売シヌズン䞭でも萜ちないチェヌンストアの運営甚アプリケヌションなど、高負荷のシステムを構築するこずが可胜になりたした。幎収。 



いく぀かの問題がありたした。特に、適切なバックグラりンドを持぀開発者を芋぀けるのは簡単ではありたせんでした。最も䞀般的な理由は次のずおりです。 「私はNODE.JSが嫌いです!!! 1111oneone」、圌らは蚀語の明らかな単玔さが、以前にサヌバヌの開発を行ったこずがないプログラマヌを匕き付けるずいう事実に由来したす。フロント゚ンドは通垞JSで蚘述されおおり、たったく異なるタスクがそこで解決されたす。 Javaの開発者も、「Javaスクリプトず呌ばれる蚀語で、問題なくプログラミングできる」ずいう偏芋を持っおいたため、問題に盎面したした 。 .Netプラットフォヌムで䜜業したプログラマヌは、他のプログラマヌよりもNodeの䞋でJSでプログラミングするタスクに簡単に察凊できるこずがわかりたした。さらに、ノヌド開発の時点で、ドットネットワヌカヌは需芁にいく぀かの困難を経隓し、バック゚ンドのJSプログラマヌは十分な報酬を埗おいたした。



ラむアン自身は、開発の完了埌しばらくしお、2012〜13幎頃に、Go蚀語に興味を持ち、Node.jsに関連するすべおのものから長い間離れたした。これは、この蚀語が機胜ず速床の点で圌に完党に適しおいたためです。その埌、圌はニュヌラルネットワヌクに興味を持぀ようになりたした...



䜜成者によるNode.jsぞの批刀 



JSConf 2018カンファレンスの玄6か月前、ラむアン・ダヌルは、創蚭からほが10幎埌、圌の発案者ず䞀緒に仕事をしようず決心したした。これは、圌が芋たものに満足しおいるずいうこずではありたせん。間違いなく、プロゞェクトは倧きく発展したしたが、Node.jsの開発䞭に、ラむアンはI / Oの問題を解決するこずに固執しすぎたため、いく぀かの間違いを犯し、それがシステムの問題になりたした。プラットフォヌムが非垞に人気になったため、すべおの䟝存関係ず互換性を壊さずにグロヌバルに䜕かを倉曎するには、すでに遅すぎたした。 



Ryanは、Node.jsだけでなく、過去のすべおの゜フトりェアに察しお非垞に批刀的でした。 2011幎、圌はGoogle+で小さな「5分間憎悪」むベントを䞻催したした。゜ヌシャルネットワヌク自䜓は長い間閉鎖されおきたしたが、むンタヌネットはすべおを蚘憶しおいたす。圌の蚀葉の翻蚳はここで読むこずができたす 私はほずんどすべおの゜フトりェアが嫌いです。そしお、2018幎に話す1幎前に、圌は次のように述べおいたす。 「サヌバヌの堎合、Go以倖の蚀語を想像するこずはできたせん。」将来を芋据えお、圌は「node.jsキラヌ」であるGoで曞き始めたしたが、その埌Rustに切り替えたした。



したがっお、2018幎の圌のスピヌチの批刀的な口調は誰も驚かず、プラットフォヌムの䜜成者の新鮮な倖芳が再びいく぀かの問題の関連性を高めたした。 





Node.jsに぀いお埌悔しおいる10のこず



その䞭で考慮された芁点を思い出しお、珟圚の状況ず比范しおみたしょう。



1。





開発の初期に萜ずされた玄束の欠劂。 



2.2。





安党保障問題。Node.jsアプリケヌションは、ロヌカルディスク、ネットワヌク、および䞀般的にはシステム党䜓に䞀床にアクセスできたす。 



3.3。





誰もが長い間攟棄しおきた耇雑で時代遅れのビルドシステム。



四。





䞍必芁に面倒なpackage.json。 



五。





プラットフォヌムのセマンティクスはブラりザず互換性がありたせん



6。





モゞュヌルの集䞭リポゞトリ。



7。





モゞュヌルを接続するコマンドは、ファむルタむプの必須の衚瀺を必芁ずしないため、混乱を招く可胜性がありたす。



8.8。





index.htmlず同様に、index.jsを䜿甚するず、モゞュヌルのロヌドがより困難になり、package.jsonをサポヌトした埌は䞍芁になりたした。 



スピヌチの議論で、レポヌトの遺憟の数がタむトルの遺憟の数ず䞀臎しないず繰り返し蚀及されたのはおかしいですが、ラむアンが非垞に心配しおいたこずを考慮に入れる必芁がありたす、圌は著しく動揺したしたスピヌチの冒頭で。さらに、圌はむンタビュヌの䞭で、圌はメディア関係者ではなくプログラマヌであるず繰り返し述べ、ブロック内の圌の投皿のそれぞれが「䜕癟ものコメントを匕き付ける」こずず「今は私たちの意芋を衚珟する際にもっず泚意する必芁がある」こずを埌悔したした。コミュニティはしばしば圌の蚀葉が文字通りすぎるこずを理解しおいたした。



デノアナりンス



Node.jsの欠点をリストした埌、Ryanはサヌバヌ䞊で独自のJSランタむムプロゞェクトを提瀺し、Node



1に察する利点を順番にリストしたした 。





コヌドを実行するための安党なサンドボックスで、必芁な暩限のみを付䞎したす。



2.2。





モゞュヌルの䜿甚の簡玠化、盎接リンクによるロヌド、ロヌカルキャッシュぞの保存。これらは、特別なコマンドが指定されるたで曎新されたせん。



3.3。





TypeScriptの完党サポヌト。



四。





䞍芁なリンクのない唯䞀の実行可胜ファむル



5。





Denoを䜿甚するず、特定のタスクにどちらが䟿利かによっお、さたざたな蚀語でコヌドをネむティブに実行できたす。



6.6。





キャッチされおいない゚ラヌでアプリケヌションがクラッシュし、非同期操䜜はPromises、優れたブラりザ互換性を返したす。



䞊蚘に加えお、DenoはESモゞュヌルを䜿甚したすが、ESモゞュヌルはノヌドでサポヌトされおいたせんでした。



Node.jsの倉曎点





レポヌトはあいたいになりたした。そのため、コミュニティでこのような話題が発生したした。䞀方では、発蚀は正しかった。䞀方、それらのすべおがそれほど重芁であるずは限らないため、すべおを削陀しお新しい環境を䜜成する必芁がありたす。 



おそらく、セキュリティ䞊の懞念に぀いおの最も公正な蚀及です。 Node.jsには、実行䞭のアプリケヌションからサヌバヌを閉じるサンドボックスがありたせん。この問題はただ完党には解決されおいたせん。ネットワヌクぞのアクセスはファむアりォヌルで閉じるこずができ、ディスクぞのアクセスやその他のアクセス蚱可はコンテナから起動するこずで制限できたすが、これらはサヌドパヌティの゜リュヌションであり、どこでも䟿利ではない堎合がありたす。 



レポヌトに蚘茉されおいる非同期コヌドの実行に関する問題は、珟時点では倚かれ少なかれ解決されおいたす。もちろん、Ryanが2010幎にPromiseを削陀しおいなかったずしたら、それらは耇雑すぎるず信じおいたはずですが、サヌドパヌティの機胜は蚀うたでもなく、倚くのシステムラむブラリがすでにこの機胜を提䟛しおいたす。珟圚、ワヌカヌず䞊行しおスクリプトを実行するこずが可胜です。MicrosoftやAlibabaなどの倧䌁業は、マルチスレッドを䜿甚しおNodeのバヌゞョンを開発しおいたす。



GYPが排陀されたこずは䞀床もありたせん。この遺産は、今埌長い間Nodeに存圚したす。ブラりザ互換のURLリンクは問題倖ですが、しばらくの間、NodeはESモゞュヌルをサポヌトしおいたす。 



䟝存関係の解決には泚意が必芁で、ブラりザヌずは動䜜が異なりたすが、最も重芁なのは、問題がないわけではありたせんが、動䜜するこずです。そしお、package-lock.jsonメカニズムの倖芳はそれらを最小限に抑えたす。



NPMは2012幎以来倧きく進化しおきたした。ずはいえ、進化は苊痛であり、歯を端に眮く巊パッドなどの問題によっお抌し進められたした 。しかし、パッケヌゞはもはや消えるだけではありたせん。セキュリティ監査にはいく぀かのレベルがあり、さたざたな゜ヌスからパッケヌゞをむンストヌルする機胜がありたす。これたでのずころ、開発者が正しいコヌドをgithubにアップロヌドし、npmで゚クスプロむトを䜿甚したコヌドをアップロヌドするこずを劚げるものは䜕もありたせん。 



index.jsの問題は、モゞュヌルを接続する際の拡匵機胜の欠劂ず同様に、実際よりも䞍自然に芋えたす。圌は急いで議論の半分を思い぀いたずいう印象を受ける。ちなみに、蚘事の最埌で詳しく説明したした。



これらの問題のほずんどすべおが解決され、非垞に成功しおいるこずを認めるべきです。ダヌル自身がプロゞェクトの開発から離れたした。2012幎以来、圌はノヌドずは䜕の関係もありたせん。圌のレポヌトはかなり䞻芳的に芋え、プラットフォヌムの欠点は圌自身の発案により誇匵されおいたす。したがっお、このスピヌチは、Node.jsを公開するずいうよりも、開発の宣䌝のように芋えたす。



公平を期すために、Nodeのアクティブな開発は䌁業によっお匷く制玄されおいるこずに泚意しおください。䌁業では、倧量のレガシヌコヌドが存圚するため、コストがかかりすぎお削陀できたせん。これは、Linuxを曎新する必芁があり、すべおのモゞュヌルを新しいシステム甚にアセンブルできない堎合に、長い間深刻な問題を匕き起こしおきたした。遅かれ早かれ、膚倧な量のコヌドを曞き盎さなければならず、それに倚くの時間ずお金を費やしたす。倧䌁業はこれにリ゜ヌスを費やす䜙裕がありたすが、開発者がそれを曎新する時間がない堎合、小さな愛奜家のオヌプン゜ヌスプロゞェクトは攟棄されたす。 



それにもかかわらず、Node.jsには巚倧なコミュニティがあり、プログラマヌが倚くの問題に察凊するのに圹立ちたす。ただし、開発者がコミュニティの垌望どおりに優先順䜍を蚭定しない堎合があるため、プロゞェクトは䞍均䞀に進行したす。遅かれ早かれ、ノヌドがラむアンが説明した元の欠陥に最終的に遭遇する可胜性があり、それらを解決するこずは䞍可胜になりたす。しかし、ITにずっお、䜕かをグロヌバルに倉曎する必芁があるのはこれが初めおではありたせん。たずえば、Flashはそれほど面倒なこずなく正垞に埋め蟌たれたした。



デノ開発





講挔の盎埌、コミュニティはNode-Denoアナグラムをすぐに理解したした。い぀かDoneずいうプロゞェクトが曞かれるずいうゞョヌクさえありたした。しかし、冗談はさおおき、Denoの開発はどこから来たのでしょうか



講挔䞭、ラむアンは正盎に蚀っお、デノは珟圚実隓的なプロトタむプであり、ノヌドの代替ずしお提䟛されおいたせん。





しかし、それから2幎以䞊が経過し、昚幎の春にようやく1.0.0ずいう数字でリリヌスされたした。



前述のように、プロゞェクトはGoで開始されたしたが、埌にRustで再蚭蚈されたした。プロゞェクトは圓初のように枛速を止めたしたが、それでも速床に利点は芋られたせんでした。チヌムによる最適化により、TypeScriptの操䜜が高速化されたした。これは、プレれンテヌションの時点で、TSトランスレヌタの起動に1秒かかったためです。ラむアンが2018幎のレポヌトで提案したように、゚ンゞンスナップショットを䜿甚しお、これは解決されたした。



プラットフォヌムはNodeず完党に互換性がなく、絶察的な代替ずしおではなく、代替ずしお、研究プロゞェクト、開発者にそのような゜リュヌションを開発する他の方法を開発するよう促す実隓ずしお考えられたした。 



Denoは珟圚、次の郚分で構成されおいたす。サンドボックスであるV8゚ンゞン䞊のTypescript / Javascriptラッパヌ は、TS / JSレむダヌずRustバック゚ンドファむルシステムにアクセスできるバック゚ンドの間のむンタヌフェむスを提䟛したす。マルチスレッドは、JavaScriptの「Promise」に類䌌した「RustFuture」構造を䜿甚しお、むベントの䜜成ず凊理を担圓するRust非同期ランタむムであるTokioを䜿甚しお提䟛さ れたす。 



環境は本質的に安党であり、デフォルトではアクセス暩はありたせん。必芁な暩限を付䞎するには、特定のコマンドラむンオプションを䜿甚しおプラットフォヌムを起動する必芁がありたす。解決策はあいたいです。遅かれ早かれ、開発者はスクリプトで無限のオプションを曞くこずにうんざりするかもしれたせん。なぜなら、倧芏暡なプロゞェクトではそれらがたくさんあり、「-allow-all」がデフォルトで起動されるからです。 



 å¿…芁に応じお、Denoを䜿甚するず、特定の蚈算タスクを実行するのに䟿利な蚀語でプログラムを呌び出すこずができたす。



***



珟時点では、リリヌスバヌゞョンはすでに1.7ずいう番号でリリヌスされおいたす。しかし、Denoを支持する倧䌁業の溝Node.jsはただ聞こえたせん。node.jsのマヌケットプレむスでむメヌゞを䜜成したした







。Denoプロゞェクトは熱意を持っお開発されおいたすが 、ラむアン自身は珟圚Googleで働いおおり、ニュヌラルネットワヌクずディヌプラヌニングに関䞎する゚ンゞニアのタスクの蚭定に取り組んでいたす。 



Dahlは、Ryanにずっおたったく予想倖のNode.jsがすぐに認識され、すぐに人気を博したずきに撮圱された最初のプロゞェクトの耇合䜓を開発したず誰かが考えおいたす。しかし、おそらく、圌は新しいアむデアなしでは座るこずができず、圌自身の発明の䞍完党さを容認するこずができない人々の䞀人です。 



ダヌルは2018幎の䌚議で話すずっず前にデノに取り組み始めたしたが、圌女の元のテヌマは非垞に異なっおいたした。圌は、過去数幎間行っおきた機械孊習に぀いお講挔する予定でした。しかし、圌には準備する時間がなく、圌のスピヌチのトピックは䌚議の数日前に文字通り削陀されたした。そしお、圌はコミュニティでの自分の重みず、聎衆が圌のパフォヌマンスをどのように期埅するかを理解しおいたので、聎衆の期埅に応える新しい䟡倀のあるトピックを芋぀けるために、1日か2日で非垞に懞呜に努力しなければなりたせんでした。



したがっお、圌は「Node.jsのキラヌ」を宣蚀する぀もりはなかったのかもしれたせんが、新しいレポヌトを䜜成するために急いでいたした。圌はなんずかかなりの量のノむズを䞊げるこずができたしたが、おそらくディヌプラヌニングのトピックよりもはるかに倚いでしょう。






All Articles