Node.jsを理解する

親愛なる読者! この記事は3年ですが、私の意見では、興味深いことが含まれています。 ご理解いただきありがとうございます。



一般に、Node.jsは、私が代表する人々に2つの反応を引き起こします。 基本的に、彼らはすぐにそれを理解するか、何も理解しないことになります。

まだ2番目のカテゴリに属している場合は、ノードについて説明してみましょう。







しかし、Ruby、Python、PHP、Javaなどで必要なことはすべて実行できます


聞こえます! Nodeは、あなたのためにすべての仕事をやって来るクソなユニコーンではありません、許してください。 これは単なるツールであり、少なくとも現時点では通常のツールに取って代わることはないでしょう。



要点をつかもう!


もちろん、さあ。 Nodeは、複数のことを同時に行う必要がある場合に適しています。 コードを書いて「これを並列化したい」と言ったことはありますか? Nodeでは、コードを除き、すべてが並行して動作します。



なに?


はい、はい、 あなたのコードを除いてすべてが並行して動作します。 これを理解するために、あなたのコードが王であり、ノードが召使の軍隊であると想像してください。

その日は、使用人が王に目覚め、彼に何かが必要かどうかを尋ねることから始まります。 王は召使に仕事のリストを渡し、さらに寝ます。 今、しもべはこれらのタスクを彼の同僚に分配し、彼らは仕事に行きます。

部下が仕事を終えた後、彼は王室に報告しに行きます。 王は一度に一人の僕に耳を傾けます。 時々、使用人が去るときに王はより多くのタスクを投げます。

人生は美しいです。召使は仕事を並行して行いますが、王は一度に一つの結果だけを聞き、一つの結果に集中することができます。



それはすべて素晴らしいですが、これらの愚かな比phorを残して、オタクのようにすべてを伝えることができますか?


もちろん。 単純なNodeプログラムは次のようになります。



var fs = require('fs'), sys = require('sys'); fs.readFile('treasure-chamber-report.txt', function(report) { sys.puts("oh, look at all my money: "+report); }); fs.writeFile('letter-to-princess.txt', '...', function() { sys.puts("can't wait to hear back from her!"); });
      
      







コードはNodeに2つのタスクを与えます:ファイルの読み取りと書き込み、そしてそれは寝ます。 Nodeがタスクを完了すると、 コールバックが呼び出されます。 ただし、一度に呼び出されるコールバック関数は1つだけです。 この関数が処理を完了するまで、他のすべてのコールバックは並んで待機します。 さらに、これらの関数が呼び出される順序についての保証はありません。



したがって、コードが同じデータ構造を同時に使用するかどうかを心配する必要はありませんか?


まさに! JavaScriptシングルスレッド/イベントループデザインの美しさは次のとおりです。



それはすべて素晴らしいですが、なぜそれを使用する必要がありますか?


1つの理由は効率です。 Webアプリケーションでは、通常、応答時間はすべてのデータベースクエリを完了するのにかかる時間の合計です。 Nodeを使用すると、すべての要求をすぐにすぐに実行できます。これにより、アプリケーションの応答時間が最長の要求の実行時間に短縮されます。

もう1つの理由はJavaScriptです。 Nodeを使用して、ブラウザーとサーバーの間でコードを交換できます。 また、JavaScriptは本当に普遍的な言語になりつつあります。 Python、Ruby、Java、PHPで何を書いたかは関係ありません...過去に、おそらくJSで何かを書いたでしょうね?

そして最後の理由はコードの速度です。 V8は絶えず拡大しており、地球上で最速のダイナミックインタープリターの1つです。 速度に応じて、JavaScriptほど攻撃的な他の言語についても知りません。 その上、NodeのI / Oは非常に軽量であるため、システムでI / Oをできるだけ早く使用できます。



では、これからすべてのNodeアプリケーションの作成を開始する必要があるとおっしゃいましたか?


はい、いいえ。 Nodeハンマーを振るとすぐに、すべてが明らかに釘のように見えます。 ただし、期限のある何かに取り組んでいる場合は、次のことに基づいて決定を下すことができます。





NodeはWindowsで動作しますか?


いいえ、Windowsを使用している場合は、Linuxを搭載した仮想マシン(VirtualBoxを推奨)をインストールする必要があります。 Windowsのサポートは計画されていますが、移植を手伝いたくない場合は数ヶ月息を止めないでください。



NodeでDOMにアクセスできますか?


いい質問です! いいえ、DOMはブラウザギズモであり、幸いなことにNodeのJSエンジン(V8)はこの混乱から分離されています。 ただし、クライアント側コードの単体テストなど、非常に興味深い機能を開くことができるモジュールとしてNodeにDOMを実装する作業をしている人がいます。



イベント駆動型プログラミングは複雑すぎませんか?


それはすべてあなた次第です。 ブラウザでAJAXリクエストとユーザーイベントをジャグリングする方法を既に学習している場合、Nodeに慣れることは難しくありません。

いずれにせよ、TDDはプロジェクトのサポートに本当に役立ちます。



誰が使用していますか?


Node wikiには小さな/不完全なシートがあります (「Companyes Using Node」)。 Yahooは Node for YUIを実験しており、Plurkはそれを巨大な彗星に使用しています。PaulBicaz(JQueryの作成者)は、サーバー上で少しのNodeを使用する驚くべきゲームエンジンを作成しています。 Joyentは Ryan Dahl(Nodeの作成者)を雇い、積極的にプロジェクトを後援しています。

そうそう。 HerokuはNodeプロジェクトの (実験的) ホスティングサポートを発表しました



詳細はどこで確認できますか?


ティムキャスウェルは素晴らしいNodeブログを開始しました。 Twitterで#nodejsを読んでください。 ニュースレターにサインアップしてください。 そして、IRCチャネル#node.jsにアクセスします(はい、名前にドットがあります)。 もうすぐそこに200人が来るでしょう。



また、 debuggable.comで記事を執筆し続けています。



これは記事の翻訳です。



ご清聴ありがとうございました。



All Articles