親愛なる読者! この記事は3年ですが、私の意見では、興味深いことが含まれています。 ご理解いただきありがとうございます。
一般に、Node.jsは、私が代表する人々に2つの反応を引き起こします。 基本的に、彼らはすぐにそれを理解するか、何も理解しないことになります。
まだ2番目のカテゴリに属している場合は、ノードについて説明してみましょう。
- これはコマンドラインツールです。 アーカイブをダウンロードし、ソースをコンパイルしてインストールします。
- ターミナルで「node my_app.js」と記述することにより、JavaScriptプログラムを実行できます。
- JavaScriptコードは、 V8 JavaScriptエンジン (Google Chromeを非常に高速にするもの)で実行されます。
- Nodeは、ファイルシステムとネットワークにアクセスするためのJavaScript APIを導入します。
しかし、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はこれらのことでうまくやっています。
- このプロジェクトの大きさは? 小規模なプロジェクトには最適ですが、大規模なプロジェクトは、必要なライブラリなどの可用性について定性的に評価する必要があります。
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で記事を執筆し続けています。
これは記事の翻訳です。
ご清聴ありがとうございました。