V8 JavaScriptチームは、非同期機能とPromiseを最適化するための改善を発表した。チームはまた、非同期コードのデバッグエクスペリエンス、つまりJavaScript開発者にとって共通の問題点を改善した。
ES2015でのPromiseの導入、それ以降の非同期関数の導入、ES2018の非同期反復により、非同期コードの作成はコールバックを使用するよりもはるかに効率的になる。しかし、最近までこれらの新機能の使用は効率的ではなかった。Google V8のエンジニア、Maya LekovaとBenedikt Meurerは次のように説明している。
V8 v5.5(Chrome 55&Node.js 7)とV8 v6.8(Chrome 68&Node.js 10)の間で、非同期コードのパフォーマンスが大幅に向上しました。開発者がスピードを気にせずにこれらの新しいプログラミングパラダイムを安全に使用できるレベルのパフォーマンスに達しました。Promise.allのパフォーマンスは8倍に向上しました。
V8チームは、Promiseとasync関数を使用する、hapi、koa、trekなどのミドルウェアフレームワークでの使用法を調べながら、実際のソースコードのパフォーマンスについても調査した。最近のV8の変更により、これらのフレームワークを使用したときのパフォーマンスは大幅に向上した。
V8では、非同期のパフォーマンス向上につながるいくつかの変更が導入されている。たとえば、新しい最適化コンパイラであるTurboFanと、新しいガベージコレクタであるOrinocoであり、リクエスト処理を改善するためにGCをメインスレッドから外した。さらに、Node.js 8にバグがあり、場合によってはマイクロ単位の時間が経過するのを待つことになった。
パフォーマンス作業により、非同期関数の仕様を改善するためのいくつかのパッチが提案された。これにより、V8だけでなくすべてのJavaScriptエンジンのパフォーマンスが向上する。これらの変更で、2つの余分なマイクロ単位の時間を排除され、非同期機能に対する使い捨てのPromiseが削除された。
V8ソースコードの最近の更新と、非同期関数仕様の改良提案の両方によって、async/awaitは非同期関数のオーバーヘッドが減り、Promiseのコードを初めて凌ぐ結果となっている。
デバッグを容易にするために、Chrome DevToolsはスタックトレースの非同期部分も含めるようにスタックトレースを改善している。
V8は、Node.jsと同様にChromeとChromiumベースのブラウザを動かすGoogleのオープンソースのJavaScriptエンジンである。V8はBSDスタイルのライセンスで利用可能である。コントリビューションを歓迎します。Chromium code of conductの下のV8 GitHubプロジェクトを通してお願いします。