Google、Google Sheetsの計算エンジンをWebAssemblyに最適化し、2倍の性能を実現したと発表

今回は「Google、Google Sheetsの計算エンジンをWebAssemblyに最適化し、2倍の性能を実現したと発表」についてご紹介します。

関連ワード (動的、移植、高速等) についても参考にしながら、ぜひ本記事について議論していってくださいね。

本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。


GoogleはWebブラウザ上でスプレッドシート機能を提供する「Google Sheets」の計算エンジンの性能をWebAssembyで実装し、従来のJavaScriptによる実装と比較して性能を2倍に向上させたことを明らかにしました。

これにより単純なSUM計算から複雑なクエリまで、シート上でのあらゆる計算を始め、ピボットテーブルの作成、条件付きフォーマットなどさまざまな処理が高速になるとのことです。

Google SpreadSheetsの計算エンジンをWebAssemblyに最適化

この性能向上は、JavaScriptで構築されていた計算エンジンをWebAssemblyに最適化したことで実現していると説明されており、そのためにWebAssemby GC(ガベージコレクション)機能を用いたとのことです。

そのため現時点ではChromeとMicrosoft Edgeで利用可能で、今後FirefoxやSafariでも利用可能になることを期待しているとしています。

そしてGoogleがいかにして計算エンジンをJavaScriptからWebAssemblyへ移植し、最適化したかについては別の記事「Why Google Sheets ported its calculation worker from JavaScript to WasmGC」(Translation APIによる日本語版)で紹介されています。

ここではGoogleが行ったWebAssemblyへの最適化の工程を、上記の記事を基にまとめてみてみましょう。

最初はサーバで実行されていたJava製の計算エンジン

2006年にGoogle Sheetsを初めてリリースしたときには、すべての計算はJavaで書かれた計算エンジンを用いてサーバ上で行われていました。

計算エンジンがJavaScript化されてWebブラウザ上で実行されるようになったのは2013年。その際、計算エンジンの作成にはJavaコードからJavaScriptコードを生成するGoogle Web Toolkit(GWT)が用いられ、その後にJava to Closure JavaScript Transpiler(J2CL)が用いられるようになります。

しかしJavaScriptが動的な型付け言語であることを主な理由として、JITなどにより改善されつつもJavaScriptの実行速度は十分高速ではない、というのがGoogleの評価でした。

その解決策としてガベージコレクション機能(WebAssembly GC)を備えたWebAssemblyが採用されることになりました。

WebAssembly GCが登場、Javaからの移植が可能に

Googleの説明の中には出てきませんが、GoogleがこのタイミングでWebAssemblyを採用したのは、Javaコードを基にWebAssembly化するには、WebAssemblyにガベージコレクション機能が欠かせなかったからです。

Javaの実行基盤となるJavaVMは、プログラムが動的に確保して利用したメモリ領域のうち、使わなくなったメモリ領域を自動的に解放してくれる「ガベージコレクション」機能を備えています。

Javaコードを基にGoogle Sheetsの計算エンジンをWebAssembly化するには(ガベージコレクション機能も含めてWebAssemblyで実装することは技術的に不可能ではないものの手間を考えると現実的ではないため)、WebAssembly自体がガベージコレクション機能を搭載することが求められたのです。

このWebAssembly GCは、2023年末にChromeの正式な機能として取り入れられました。

参考:WebAssemblyのガベージコレクションが正式機能に、最新版のChrome 119で。Firefoxも今月リリースのFirefox 120で正式機能になる見通し

今年(2024年)5月には、WebAssmbly GCを用いたFlutter/DartのWebAssemblyへのコンパイル機能が安定版になるなど、実績も増えてきたことで安心して使えるようになってきたところです。

参考:Flutter/DartのWebAssemblyコンパイル機能が安定版に。より高速でスムーズなユーザー体験などを実現

3つの最適化を実行

Google WorkspaceチームとChromeチームは協力して計算エンジンのWebAssembly化に取り組みます。2021年半ばにはJavaからWebAssembly GC版WebAssemblyへのコンパイラを動作させる準備が整い、その年末にはWebAssembly版計算エンジンを搭載したGoogle Sheetsのプロトタイプ版が完成します。

2022年に入り、このプロトタイプを基に性能テストを行ったところ、JavaScript版計算エンジン搭載のGoogle Sheetsより2倍ほど遅くなっていました。つまり、単純にWebAssembly版にしたところ、遅くなってしまったわけです。

ここから、主に以下の3種類の最適化を行ったとGoogleは説明しています。

  • JavaVMとJavaScriptエンジンのV8で用いられていた最適化を取り入れる
  • WebAssemblyによる実装のうち、ブラウザAPIで呼び出せる機能はAPIを呼び出す
  • JavaScriptに最適化されていた実装を修正する

1つ目の最適化については「virtual method dispatching」「speculative inlining」「devirtualization」などが行われ、2つ目の最適化についてはJavaで実装されていた正規表現ライブラリ(re2j)をWebブラウザに内蔵されている正規表現のAPIを呼び出して処理することで100倍高速になり、さらに3つ目として過剰にJavaScriptに最適化されたコードを修正したことが説明されました。

これによってWebAssembly版計算エンジンを搭載したGoogle Sheetsの計算速度が、JavaScript版計算エンジン搭載よりも約2倍高速になったとのことです。

マルチスレッドサポートでさらに高性能を期待

Googleは、今後WebAssemblyがガベージコレクション機能に加えて共有メモリマルチスレッドをサポートすることでシングルスレッド性能をさらに向上させることを期待しているとし、すべてのWeb開発者が、高性能を追求する開発プロジェクトにおいて、ガベージコレクションをサポートしたWebAssemblyの使用を検討することを勧めるとしています。

COMMENTS


Recommended

TITLE
CATEGORY
DATE
GM傘下の自動運転Cruise、Microsoftなどから20億ドル調達 Azure採用
企業・業界動向
2021-01-21 18:00
ゲッティの「iStock AI生成ツール」を試す–面白みは「DALL・E」に軍配
IT関連
2024-01-18 15:14
デジタル人材の半数、「業務がChatGPTなどのAIに代替される」と回答
IT関連
2023-04-19 01:00
Chromeの疑似クラス「:has()」がjQueryの「:has()」に悪影響を及ぼす問題が解決へ。Chromeは回避策実装、jQueryは新バージョンで対応
Chrome
2022-12-22 23:08
無償で働くオープンソース開発者たちは自分の「力」に気づき始めている
IT関連
2022-01-26 18:50
セキュリティ対策に「MITRE ATT&CK」の活用を–パーソルP&Tと東洋大が連携
IT関連
2023-02-01 03:17
「ミスターミニット」、グローバルでの連結経営管理にSaaSを導入
IT関連
2021-02-10 02:17
凸版印刷、社内運動会をeスポーツに 新型コロナ対策で
最近の注目ニュース
2021-01-26 18:31
アルペン、システム内製化を推進する業務基盤に「kintone」採用
IT関連
2022-04-28 09:44
[速報]マイクロソフト、Windows上の開発者向けダッシュボード「Dev Home」発表。プルリクやタスク、開発ツールなど一覧。Build 2023
Microsoft
2023-05-24 02:11
昇給も昇格も望まない「静かな退職」をする人々–クアルトリクスが解説
IT関連
2023-02-22 08:56
マイクロソフト、「SQL Server on Windows Containers」プロジェクトを中断
IT関連
2021-07-08 17:24
ランサムウェアの要求に従うも、データが流出される事例が発生
IT関連
2022-08-27 03:42
ブックオフ、アナログレコード取扱店が1年で9倍に
くらテク
2021-05-15 12:29