io.js がリリースされました
さてさて、io.js ver.1.0.0, 1.0.1 が無事アメリカ時間の1/13日に予告通りリリースされました。
リリースから数日経過して、現在はv1.0.3が出ています。
ある程度v1.0が安定してきた今、実際にNode.jsとどう違うのかを解説したいと思います。
Node.jsと機能的に違う所はどこか
前回の記事のio.jsについて知っていること - from scratchでも触れたんですが、一番大きな違いはv8が新しくなり、ES6の機能が増えました。
詳しくは公式のES6に関するページを読んでもらうとして、かいつまんで書いていきます。
ES6の機能に"shipping", "staged", "in_progress"の3段階のラベルがつくようになりました。
これはES6の機能の安定度合いを示していて、 "shipping" > "staged" > "in_progress" の順番で安定しています。in_progressにはまだ実装途中のものもあるので、これをONにするときは注意が必要です。
shippingの機能はデフォルトでONになっているため、以下の機能はharmonyフラグを付けずに利用可能です。
- let (use strictが必要)
- const (use strictが必要)
- Map/Set/WeakMap/WeakSet
- Generators
- Binary / Octal literals
- Promise
- Symbols
- Template Strings
- New String methods
stagedの機能は今のところ以下の通りです。stagedの機能を使うにはes_stagingフラグを付けて実行してください。
- Symbol.toStringTag
- Class (use strictが必要)
- Enhanced Object Literals
お待ちかねのarrow_functionとかはまだin_progressです。個別に--harmony_arrow_functionsフラグを付けて実行してください。すこしハマりどころですが、harmonyオプションを付けてもすべての機能が有効になるわけではなく、stagedの機能までしか有効になりません。
node.js と io.js の性能差
io.jsが持っているbenchmarkスクリプトを実行しました。下記のような結果になっています。
httpの性能差
http.shのbenchmarkスクリプトを実行し、keepaliveありのReqs/secを計測しました。
node.js v0.10.35 | node.js v0.11.15 | io.js v1.0.3 |
---|---|---|
17835.903 | 17115.2285 | 18916.817 |
見ての通り、v0.10.35からは6%ほど向上し、v0.11.15からは10%ほど向上しています。
これにはhttp-parserが最新になり、性能が向上している事が起因していると思われます。
iojs インストール
現時点ではまだbrewやrpmやapt-getには対応してません。入れる場合はソースから入れるかバイナリを取得して、パスが解決できる所に入れれば利用できます。
$ wget https://iojs.org/dist/latest/iojs-v1.0.3-darwin-x64.tar.gz $ tar xvzf iojs-v1.0.3-darwin-x64.tar.gz # iojs-v1.0.3-darwin-x64/bin の下にあるファイル(node iojs npm)をパス解決できる所に配置する
また既にnodeのバージョンマネージャで代表的な、nodebrew, nvm, naveといったマネージャはiojsのインストールに対応しています。
下記の要領で取得可能です。
# nodebrew $ nodebrew install-binary io@latest $ nodebrew use io@latest # nvm $ nvm install iojs $ nvm use iojs # nave $ nave install latest # nave だけはnode.jsと分けずにバージョンが存在したらiojsを優先的にgetしてくる # node.jsとのバージョンが被ったらiojsを先に取るので常にiojsを優先するという強気 $ nave install v1.0.3
実際に使ってみる
実際に僕が作っているいくつかのソフトウェアで動かしてみると、expressもsocket.ioもgulpもさほど問題なく動作していました。試しにsocket.ioとexpressを使ったchatを作って動かしてみました。
http://iojschat.herokuapp.com/chat
※ ちなみに、enginesをiojsに指定すれば、herokuでも動かせます。
{ "name": "socket-chat-example", "version": "0.0.1", "scripts": { "start": "node index.js" }, "description": "my first socket.io app", "dependencies": { "express": "4.10.2", "socket.io": "1.2.0" }, "engines": { "iojs": "1.0.x" // ここをiojsに変えるとherokuがiojsを使う } }
ただいくら互換性を保っているとは言っても、いくつか動作しないライブラリも報告されています。
動かないライブラリがあったらここのissueに報告することになっているので、動かなければ報告してください。
SequelizeというORMが動かない事が僕の環境であったので、報告した所、Benから快く対応してもらいました。
io.jsを使ってみたいと思っている方は試しに動作させて、動かなければ報告してください。僕もサポートします。
次回のnode学園ではio.jsの内容について話します
次回のnode学園ではio.jsについてお話します。io.jsができた経緯からio.jsの実際の性能、日本ユーザーグループでiojsをどう扱っていくかまで話をする予定ですので、ご興味があれば是非参加してください!!