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.pushunshift において文字列を直接扱えるようになったことで、バイナリデータ以外の処理がよりスムーズになります。

また、内部的なメモリ管理に関わる 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を使用して既存のアプリケーションの互換性やパフォーマンスをぜひ確認してみてください。