Node.js v0.12 がリリースされました。

f:id:yosuke_furukawa:20150207184528p:plain

Node.js v0.12 がリリースされました。

さてさて、さいきんずっとio.jsの話をしてましたが、この度Node.js v0.12がリリースされました。
これまでずっとNode.js v0.12でどう変わるのかを話してましたが、この際一度、何が変わったのかおさらいしておきましょう。

Stream3

Stream3については前に一度この記事で話しました。

Stream今昔物語 - from scratch

Stream2にあったold modeの概念がなくなり、Stream1とStream2の両方のAPIに対応されAPIがシンプルになりました。

Stream中のバッファに出力するcorkとそのバッファからflushするuncorkがWritableStreamに追加されました。これによってデータを出力させずに強制的にバッファリングさせたり、バッファ中のデータを強制的にflushできるようになりました。

HTTP

  • maxSocketsというHTTPのsocket数が無限に拡大されました。今まではデフォルトで5に設定されていたため、デフォルトでは5つまでしかsocketが作れませんでした。つまり並列に5つ以上のHTTPリクエストがデフォルトで作られるようになりました。
  • KeepAlive の際にtimeoutオプションが指定できるようになりました。
  • flushHeadersと呼ばれるリクエストヘッダーをflushする事ができるようになりました。

Cluster

Clusterでroundrobinが行われるようになりました。これにより、masterはきちんとworkerに処理を順番に振り分けるようになりました。

TLS

  • TLSの中でC++とJS間でbindingを呼び出す回数を減らすようになりました。
  • APIが追加されてOCSP staplingや非同期のSNI callbackなどが行われるようになりました。

TLSに関しては大津さんの東京Node学園祭で発表していただいた資料が参考になると思います。

Buffer

  • メモリ効率の向上とそれによるGC影響が軽減されるため、全体的に効率化されています。

child_process

  • child_process.execSyncとchild_process.spawnSyncという同期処理実行用のメソッドが追加されました。これにより、いわゆるタスクランナーとしての実行時に別コマンドを実行するといった処理が効率的に書けるようになりました。

前にこういうのを書いたので、参考にしてもらえると助かります。

Crypto

  • custom engines をロードするためのAPIが追加されています
  • pass phrase に対応したAPIが増えています。
  • RSA公開/秘密鍵での暗号/復号ができるようになりました。

VM

  • sandboxで起きた変更を引き継げるようにするため、Contextifyモジュールを使うように変更されました。

ECMAScript Internationalization API

  • Intl と呼ばれる国際化対応用のAPIが追加されました。(ただし、Node.jsでは英語用のデータしか使えません。)

詳しくはここを参照してください。

ECMAScript6 対応

  • ES6系の機能もいくつか追加されています。詳しくは僕の資料をご一読ください。

感想

やはり、NodeSummit前にきっちり出してきたな、という印象です。このNodeSummitでどんな話があるか、すごく楽しみです。

ただ、個人的にものすごく気になってるのは、Future of Node.js のセッションで、まだ発表者がアサインされてないんですよね。

f:id:yosuke_furukawa:20150207184502p:plain

ここで新しくリーダー発表か、とか感じてるんですがどうなるんですかね。

このへんの話も含めて東京Node学園でできると幸いです。


東京Node学園 15時限目 - connpass