somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Node.js】インストールしてみた

Node.jsで何ができるかを教えてくれるサイトがあったので、それを実践するためにインストールすることにしました。

Node.js

JavascriptエンジンであるV8をつかった、イベントループ・ノンブロッキング(非同期)I/O環境だそうです。node.js とは何か - I am Bad at Mathが、とても参考になります。

メリット

上記にあげた参考にも書いてありますが、1プロセスによる処理であるためリソーに優しいです。apacheとよく比較されるnginxも同様だそうです。

一方、apachephpでは、リクエストに応じてプロセスを生成しています。リクエストが多ければ、リクエストに対する処理自体は付加が少なくても、プロセスが多くなるので結果的に負荷が大きくなります。

mod_rewrite+フロントコントローラでアプリを作ったとき、存在しない画像をphpで処理するような設定になっていたので印象に残っています・・・。

イベントループ

1プロセスで、どのように処理をしているのかについて軽く調べました。

イベントを常に受け取る処理を行うループがあります。なんらかのイベント(サーバに対するリクエストなど)が存在していれば、イベントに関する処理を実行します。

チャットサーバを作ったときに、接続を待つループを作ったときの感覚に似ています(重かったけど・・・)。

ノンブロッキングI/O

すばやく処理を行うためには、イベント処理後、すぐに次のイベントを処理する必要があります。ただし処理後は、出力を行わなければなりません。この出力処理をnode以外に行ってもらうことで実現しています。出力処理のために、プロセス立ち上げていたら意味ないですからね。

ダウンロード

前置き長くなりました。http://nodejs.org/から、今回は最新(2012/08/14)のWindosインストーラ(node-v0.8.6-x86.msi)をダウンロードしました。

インストール

インストール先を選ぶことも無く、すぐに終わります。コマンドプロンプトで以下のコマンドを実行するように言われました。

node -v

v0.8.6

期待しているバージョンが表示されたので問題なさそうです。ついでにPATHを調べてみました。whichが無いって不便ですよね。

# ログインユーザ環境変数
~;C:\Documents and Settings\xxx\Application Data\npm\

# システム環境変数
~;C:\Program Files\nodejs\

npmとnodejsへのPATHが追加されていました。npmはnodeのパッケージ管理の略です。ディレクトリの中は空でした。

実行

コマンドプロンプトで、nodeと実行すると対話的になります。以下のようなコードを実行してみました。

> var i = 1;
undefined
> console.log(i);
1
undefined
> true == 1
true
> true === 1
false

変数に1を入れて表示するだけです。文を書くと評価されて表示されるので、変数定義と表示の部分ではundefinedと表示されます。

undefined以外を見たくなったので、trueと1を型無視・型厳密に比較してみると、きちんと表示されていました。

おわりに

冒頭にnodeの説明をしましたが、nodeとnpmの機能を全然使っていません。よって、webコンソールでなく、ローカルコンソールでJのavascriptの動作環境ができました。またの機会にnodeでサーバーを起動してみたいと思います。