V8 JavaScriptエンジンの9.0リリースでは、ChromeおよびChromiumベースのブラウザが強化されている。JavaScriptからのWebAssembly呼び出しのパフォーマンスが改善され、正規表現マッチインデックスを追加され、そして、super
プロパティへのアクセスが高速化された。
JavaScriptからWebAssemblyを呼び出す場合、JavaScriptからJavaScriptコードを呼び出す場合と比較して、パフォーマンスが低下する。V8リリースの発表で次のように説明されている。
V8は、WebAssembly関数とJavaScript関数のパラメーターに異なる表現を使います。このため、JavaScriptがエクスポートされたWebAssembly関数を呼び出すと、呼び出しはいわゆるJS-to-Wasmラッパーを経由します。ラッパーは、JavaScriptランドからWebAssemblyランドにパラメーターを適応させ、また、結果を反対方向に適応させる役割を担います。
ラッパー呼び出しを呼び出し側でインライン化することで、JavaScriptからWebAssemblyへのラッパーのパフォーマンスオーバーヘッドを最小限に抑えることができるようになった。この実験的な--turbo-inline-js-wasm-calls
フラグを使用すると、パフォーマンスベンチマークは、典型的な呼び出しをインラインラッパーなしで約3分の1の時間内に完了することができる。他の詳細は、Faster js-to-wasm呼び出し設計ドキュメントで確認できる。
ステージ3のTC39 RegExpマッチインデックスの提案では、正規表現マッチオブジェクトに関する詳細情報を紹介している。その提案では、キャプチャされた各グループの開始位置と終了位置が記録される。例を次に示す。
const matchObject = /(i+)(q+)/.exec('iiinfoqqqq');
assert.equal(
matchObject[1], 'iii');
assert.equal(
matchObject[2], 'qqqq');
マッチインデックスは、matchObject.indicesを介して、マッチした開始インデックスと終了インデックスを提供する。
assert.deepEqual(
matchObject.indices[1], [0, 3]);
assert.deepEqual(
matchObject.indices[2], [6, 10]);
V8がマッチインデックスをサポートしているため、この機能はChrome 90以降で利用できるようになる。この機能はFirefoxとSafariでも間もなく提供される予定で、現在はナイトリーリリースでサポートされている。
superプロパティへのアクセスは、V8のインラインキャッシュシステムとTurboFanによる最適化されたコード生成によって最適化される。superプロパティへのアクセスは、以前は通常のプロパティアクセスよりも約20倍遅く、現在はパフォーマンスが同等である。超高速のsuperプロパティアクセスによって、このパフォーマンス上の利点がV8内でどのように達成されたかについて、より多くの情報が提供されている。
V8は6週間ごとに更新され、Chromeブラウザ、Node.js、Electron、DenoなどのJavaScriptが強化されている。V8はオープンソースソフトウェアであり、外部の依存関係により、コードベースのサブセットに適用可能なライセンスがいくつかある。コントリビューションはV8 Gitプロジェクトを通して歓迎であり、その際、V8のコントリビューションガイドラインとGoogleのオープンソース行動ガイドラインに従う必要がある。