Googleは、同社が提供しているスプレッドシート・サービス「Googleスプレッドシート」の計算速度を2倍に引き上げたと6月27日(現地時間)に発表した。具体的には関数の実行やピボット・テーブルの作成、書式設定などの処理が高速化した。WebブラウザとしてGoogle ChromeやMicrosoft Edgeを使うユーザーはすでに今回の改善の恩恵を受けられる。Googleは、SafariやFirefoxでも今回の改善を反映できるように作業を進めるとしている。
今回の改善では「WebAssembly Garbage Collection(WasmGC)」を利用した。これはWebAssemblyに、ガーベジ・コレクションを前提とした言語に対応するための仕様を追加したものだ。基本的にWebAssemblyは、C/C++やRustなど開発者自身がメモリ空間を管理することを前提とした言語に向けたもの。ガーベジ・コレクションを前提とした言語からWebAssemblyのコードを生成する機能を利用できることもあるが、独自実装であり、WasmGCを利用することでより効率よく機能を実装できる。
GoogleがGoogleスプレッドシートの開発を始めた頃、計算の処理はすべてJavaで記述しており、サーバー上でJavaのコードを実行することで、クライアント上に見えるスプレッドシートの計算を処理していた。その後、計算の処理をJava言語とGoogle Web Toolkitで実装したり、Java to Closure JavaScript Transpilerを利用して、サーバー上でJavaプログラムを実行してJavaScriptコードを生成し、そのコードをクライアントで動作させる手法に切り替えた。
その後Googleの検証チームが、計算処理をJavaで実装してサーバー上で動作させた場合と、JavaScriptにしてクライアントで動作させた場合を比較したところ、JavaScriptのプログラムがJavaプログラムの3倍以上低速であると判明した。そこで、Google ChromeのV8 JavaScriptエンジンの開発チームや、WebAssemblyコードへの事前コンパイルツール「Binaryen」の開発者と共同で計算処理のWasmGCへの移行を開始した。
2021年半ばには、JavaコードからWasmGCを生成するコンパイラの準備が整い、2021年末には計算処理をWasmGCで実装したGoogleスプレッドシートのプロトタイプが完成。2022年始めには、処理性能のデータを収集し始めた。この頃、WasmGCで実装した計算処理は、JavaScript版に比べておよそ2倍も遅かったという。
その後、ほかの言語をWebAssemblyにコンパイルする際の最適化手法を流用したり、JavaScriptの標準APIを利用した方が良いところでは、そちらを利用するなどの回収を加えていった。その結果、今回公開したGoogleスプレッドシートでは、計算処理の性能がJavaScript版のおよそ2倍に向上したという。
- 関連リンク
この記事は参考になりましたか?
- この記事の著者
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です