Node.js 7.6がリリースされた。async
/await
サポートがデフォルトで有効になり、低メモリデバイスにおけるパフォーマンスが改善されている。
Node 7.6のasync
/await
サポートは、ChromiumのJavaScriptエンジンであるV8をバージョン5.5にアップデートしたことによるものだ。これが意味しているのは、async
/await
はもはや実験的なものではないということだ。--harmony
フラグ(ほぼ完成しているけれどもV8チームがまだ安定していないと考える機能を有効にする)を指定しなくても使えるようになる。
async
/await
の一番のメリットは、非同期オペレーションのシーケンスをコールバックを通してネストする「コールバック地獄」を回避できることだ。
たとえば、コールバックを用いた2つの非同期オペレーションの処理は次のようになる。
function asyncOperation(callback) {
asyncStep1(function(response1) {
asyncStep2(response1, function(response2) {
callback(...);
});
});
}
async
/await
を使うと、コードが簡素化されて、まるで同期オペレーションのシーケンスのように見える。
async function asyncOperation(callback) {
const response = await asyncStep1();
return await asyncStep2(response);
}
コールバック地獄を解決するもう一つの方法にPromiseがある。これはこれまでもJavaScriptで使えていた方法だ。Promiseを用いた場合、先ほどの例は次のようになる。
function asyncOperation() {
return asyncStep1(...)
.then(asyncStep2(...));
}
しかし、もっと複雑になると、Promisesを使うのはやっかいになる。
また、V8 5.5ではヒープサイズおよびゾーンメモリ消費が改善され、V8 5.3と比較して、低メモリデバイスにおけるメモリフットプリントが最大35%削減されている。
その他の注目すべき変更点は以下の通り。
- 古いCLIデバッガー
node debug
が、新しいデバッガープロトコルnode --inspect
に対して書き直された。V8の将来のバージョンでは、このプロトコルだけがサポートされる。 fs
にfile:
プロトコルのサポートが追加された。これによりfs.readFile(URL('file:///C:/path/to/file');, (err, data) => {});
と書けるようになる。
Node 7.6では、V8 5.5のほか、クロスプラットフォーム非同期I/Oライブラリのlibuv 1.11やzlib 1.2.11などの依存関係もアップデートされている。
Rate this Article
- Editor Review
- Chief Editor Action