2013年3月6日、Node.jsの開発チームは最新の開発版となるバージョン0.9.12をリリースしました。

本リリースは、次期安定版であるv0.10.0のリリースに向けた実質的な リリース候補 (RC) 版 として位置づけられています。

開発チームは、現時点のv0.9.12がv0.9系列の中で最も安定した状態にあるとして、ユーザーに積極的なテストと利用を呼びかけています。

もし重大な問題が見つからなければ、2013年3月11日の月曜日には正式なv0.10.0が公開される見込みです。

v0.8を超える圧倒的なパフォーマンスの向上

Node.js v0.9系列の開発における最大の焦点の一つは、前世代の安定版であるv0.8のパフォーマンスを超えることでした。

今回のv0.9.12において、ついに HTTP、ファイルシステム (FS)、およびTLSの全主要ベンチマークでv0.8を上回るスコア を記録しました。

これは、長らく続いてきたv0.9系列の開発が、性能面でも完成の域に達したことを証明しています。

以下の表は、今回のアップデートで特に注目すべき変更カテゴリをまとめたものです。

カテゴリ主な改善内容
パフォーマンスHTTP, FS, TLSの処理速度がv0.8を上回る
Stream APIReadable.pushへの文字列対応、内部バッファの最適化
ネットワークDNSのNAPTRクエリ対応、FIN送信後のエラーハンドリング改善
クラスタdestroy() メソッドを kill() へ名称変更

ストリームAPIの大幅な刷新と最適化

開発の要となっている ストリーム (Stream) 関連の機能 には、多くの破壊的ではない修正と改善が含まれています。

例えば、Readable.push や unshift において文字列を直接扱えるようになったことで、バイナリデータ以外の処理がよりスムーズになります。

また、内部的なメモリ管理に関わる bufferSize オプションが削除され、大量の読み込み時に highWaterMark が自動的に増加する仕組みが導入されました。

これにより、開発者が手動で詳細なバッファ調整を行わなくても、効率的なデータの流れが確保されるようになっています。

以下に、今回のリリースに関連するクラスターモジュールの変更例を示します。

JavaScript
// v0.9.12におけるクラスターの操作例
const cluster = require('cluster');

if (cluster.isMaster) {
  const worker = cluster.fork();
  
  // 以前の destroy() から kill() へ名称が変更されました
  // シグナルを指定してワーカーを停止します
  worker.kill('SIGTERM');
}
実行結果
(実行結果として指定したシグナルに基づきワーカープロセスが終了します)

開発環境に関連するその他の修正点

Windows環境での利便性向上も図られており、child_process において ENOENT エラーが正しく処理されるようになりました。

また、MSIインストーラーのビルドプロセスが修正され、パスにスペースが含まれる環境でも正常に動作するようになっています。

DNSモジュールでは、新しく NAPTR (Naming Authority Pointer) クエリがサポート され、より高度な名前解決が可能になりました。

デバッグを容易にするために、非推奨の機能を警告する --throw-deprecation フラグも追加されています。

まとめ

Node.js v0.9.12は、次世代の安定版である v0.10.0への架け橋となる重要なリリース です。

懸案だったパフォーマンス面でもv0.8を超えたことで、多くのユーザーが安心して移行できる準備が整いました。

来週に予定されているv0.10.0の正式リリースを前に、このv0.9.12を使用して既存のアプリケーションの互換性やパフォーマンスをぜひ確認してみてください。