6月27日、GoogleはGoogle Sheetsの計算速度をデスクトップ版ChromeとEdgeで2倍に向上させた方法についてweb.devで記事を公開した。
この改善は、最も単純なSUM計算から複雑なクエリまで、ファイルサイズに関わらず適用されるという。ユーザーは数式の実行、ピボットテーブルの作成、条件付き書式の使用などでこの改善を実感できる。
Google Sheetsは、背後でWasmGCを使用してコードの実行速度を向上させている。この新しいウェブ技術は、既存のWebAssembly仕様への「拡張」であり、JavaScriptに代わるものである。
元々、Google Sheetsの計算はサーバー側のJavaコードで行われていたが、2013年にローカル/クライアント側に変更された。
膨大な量のJavaコードをJavaScriptに移植するにあたり、JavaとJavaScriptのコードが全く同じふるまいを行うことを保証する検証環境を構築しただけでなく、実行速度の比較も行った。その結果、計算エンジンの JavaScript バージョンは Java バージョンよりも 3 倍以上遅いことが判明したという。
こうした状況において、WebAssemblyにガベージコレクションの機能を追加する「WasmGC」が、最適化の鍵となった。
WasmGCは、ガベージコレクション言語に対して、C++に対して行われたWasmと同様の効果をもたらすことを目指している。Googleでは、WasmGCがWasm以上に影響力を持つ可能性があると考えている。
とはいえWasmGC版の初期バージョンでは、計算パフォーマンスが JavaScript版に比べて約2倍遅かった。しかし、新しい仕様、新しいコンパイラ、いくつかの新しいライブラリを考えると、これは悪い結果ではない。ここからGoogle Sheetsチームは以下のような最適化を行い、結局は冒頭に述べたような「2倍高速」というレベルまでパフォーマンスを改善させた。
- Java 仮想マシン (JVM) および V8 にすでに存在していたコア最適化を複製する
- 高度に最適化されたブラウザ API を使用する
- JavaScript 固有のコーディング パターンを削除する
これらの速度改善は、現在はGoogle ChromeおよびMicrosoft Edgeにおいてのみ恩恵を受けられるが、将来的にはSafariやFirefoxなどの非Chromiumブラウザへの対応も追加する予定だという。
詳細はWhy Google Sheets ported its calculation worker from JavaScript to WasmGCを参照していただきたい。
この形式で良いでしょうか?他に追加や修正が必要な点があれば教えてください。