Node.js勉強メモ
Node.jsとApacheとかの違い
大量のリクエストをさばく仕組みとして、Apacheとかとモデルを変えている
スレッドモデル(Apache)
スレッドは1つのものしか処理ができないので、新しいリクエストがきたら新しいスレッドを立ち上げて処理をする。 スレッド生成の際にメモリを消費するので、メモリの限界がくるとスレッドが作られず、待たされるリクエストが発生する。
イベントループモデル(Node.js)
イベントループでは実行する処理(リクエスト)をキューに格納してから順に実行していく。イベントの完了は待たないので処理をブロックしないように書く。
- ノンブロッキングな書き方をしなくてはいけない
- 処理の終わる順番がイマイチわからない
書き方のお作法
ノンブロッキングな書き方
コールバック関数を使うだけ、使う対象はDBの接続など処理に時間がかかるもの
setTimeout(function(){ console.log('hoge'); }, 1000); console.log('end');
ブロッキングな書き方をするとシングルスレッド故に全ての処理がとまってしまう、あかん。下記はドットインストール内でやっていた無理やりなブロッキングな書き方。
var start = new Date().getTIme(); while (new Date().getTime() < start + 1000); console.log('end');
外部ファイルに設定ファイルを切り出す
hoge.jsを下記のような形でつくる
exports.hoge = 'hoge'; exports.hage = 'hage';
下記みたいな形でrequireしてしてオブジェクトの形でアクセスすれば取得できる
var hoge = require('./hoge');
Node.js入門 (全16回) - プログラミングならドットインストール node.jsでサーバサイドJavaScript開発入門(2):naveでNode.jsのバージョン管理&イベントループ詳説 (2/3) - @IT ithreads でスレッドプール - naoyaのはてなダイアリー