node.jsを理解する

Node.jsは通常、私がそれについて語った人々に2つの異なる反応を引き起こしました。 基本的に、彼らはそれを「現状のまま」認識しましたが、多くは困惑しました。



2番目のグループに属している場合、Node.jsとは何かを説明しようとします。



「しかし、Python、Ruby、Java、PHPなどで必要なことはできます...」



はい、すでに聞いています。 そしてあなたは正しいです! Nodeは、あなたのためにあらゆることをする魔法のユニコーンではありません。 これは単なるツールであり、少なくとも今は他のすべてを置き換えることはできないでしょう。



「要点をつかもう!」



いいね Nodeは、一度にいくつかのことを行う必要がある場合に適しています。 別のコードを書いて「これを並行して動作させたい」と言ったことはありますか? したがって、Nodeでは、コードを除き、すべてが並行して実行されます。



「なに?」



そうです、あなたのコードを除いてすべてが並行して実行されます 。 これを理解するには、あなたのコードが王であり、ノードが彼のしもべだと想像してください。



毎日、 一人の召使が王を起こして、何が必要かを尋ねるという事実から始まります。 王は召使に仕事のリストを与え、眠りについた。 サーバントはこれらのタスクをすべてのサーバントに分配し、仕事に行きます。



しもべはいくつかのタスクを完了するとすぐに、王のところに来て報告します。 王は一度に一人の使用人のみを受け取ります。 王は報告の後、時々召使に他の仕事を与えます。



使用人は同時にタスクを実行し、結果を一度に1つずつ報告するため、王は集中できます。 *



「それは素晴らしいことですが、比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!"); });
      
      





このコードは、ノード2のタスクにファイルの読み取りと書き込みを行わせてから、スリープモードに移行します。 Nodeがタスクを完了すると、コールバック関数が呼び出されます。 ただし、同時に実行できる関数は1つだけなので、実行が終了するまで残りの関数は順番を待機します。 さらに、これらのタスクのコールバック関数が実行される順序についての保証はありません。



「では、異なる機能からのデータへの同時アクセスについて心配する必要はありませんか?」



わかった! はい、これはJavaScriptのシングルスレッドイベントループ設計のすばらしい結果です。



「とても良いのですが、なぜこれを使うべきなのですか?」



1つの理由は効率です。 Webアプリケーションでは、応答時間は通常、すべてのデータベースクエリを完了するために必要な時間の合計です。 Nodeを使用すると、すべての要求を一度に完了することができ、応答時間を最も遅い要求の期間まで短縮できます。



もう1つの理由は、JavaScriptの使用です。 Nodeを使用すると、サーバーとクライアントの両方でコードの一部を再利用できます。 JavaScriptは、真に普遍的な言語になるために進化しています。 以前にPython、Ruby、Java、PHPを使用したかどうかは関係ありませんが、おそらくJavaScriptも使用していませんか?



そして最後の理由は速度です。 V8は、動的言語の実行速度についての理解の境界を常に拡大しています。 JavaScriptが現在行っているほど高速になっている他の言語を思い出せません。 さらに、NodeのI / O操作は本当に最適化されており、システムの可能性を可能な限り活用しています。



「だから、ノードでアプリケーションを作成する必要がありますか?」



はい、いいえ。 Nodeとハンマーの使用方法を学習すると、すべてのタスクが釘のように見え始めます。 ただし、特定の期限を設定して作業している場合は、次の質問に答えることでノードを選択する(または選択しない)ことができます。



「ノードはWindowsで動作しますか?」



いや Windowsを使用する場合は、Linuxを備えた仮想マシン( VirtualBoxをお勧めします)が必要です。 Windowsのサポートが計画されていますが、待っている間、今後数か月間は息を止めないでください。移植に関するより良いヘルプ(現時点では、NodeはWindows + Cygwinで動作するはずです)



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



いい質問です! いいえ、DOMはJavaScriptエンジン(V8)とは別にブラウザーで定義されます。 ただし、 DOMをNodeモジュールとして実装する作業をしている人がいます。Nodeモジュール、Nodeを使用してクライアントコードをテストするなど、非常に興味深い機能を開くことができます。



「イベントのある言語でプログラミングするのは本当に難しいですか?」



それはあなた次第です。 ブラウザでAJAX呼び出しとユーザーイベントをジャグリングする方法を既に学習している場合、Nodeに慣れるのに問題はないはずです。



いずれにせよ、TDDはメンテナンスが容易なアプリケーションの作成に大いに役立ちます。



「すでにNodeを使用しているのは誰ですか?」



不完全なリストはWikiにあります (「ノードを使用する企業」にスクロールします )。 Yahooは NodeとYUIを実験しており、 Plurkはそれを大規模なCometサーバーに使用し、Paul Bakaus(JQuery UIチーム)は、バックエンドでNodeを使用する驚くべきゲームエンジンを作成します。 Joyentは著者Nodeを雇い、その開発を大いに後援しています。



そうそう、HerokuはNodeアプリケーションをホストするための (実験的な) サポートを発表しました。



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



Tim CaswellがすばらしいHow To Nodeブログ開始しました。 Twitterで#nodejsをフォローしてください。 ニュースレターにサインアップしてください。 そしてIRCに#node.js (はい、名前のドット)があります。



debuggable.comで Nodeについても書きます。



今日は以上です。 ご質問がある場合は、お気軽にコメントしてください!



-フェリックス・ガイゼンデルファー



*:私は明らかに誇張しますが、実際にはノンブロッキングコード実行の概念に類似するものを見つけるのは非常に困難です。



All Articles