サイズ上限
ブラウザではサイズが増えるほど転送量と読み込み時間が増えるため、WASM パッケージにサイズ上限を設けています。Native Node / Python / CLI には WASM と同じサイズ検査を適用しません。それでも WASM ビルドがコア全体の依存方針を決めます。
用語: サイズ上限
ターゲット別の成果物サイズ上限です。ハード上限を超えるとビルドが失敗し、ソフト目標を超えると警告が出るので原因を調べます。CI とリリースワークフローは、make size-check と同じ検査スクリプト(tools/bench/wasm_size_report.sh)を実行します。
用語: Brotli と非圧縮サイズ
非圧縮サイズ はディスク上の WASM ファイルサイズです。Brotli は Brotli に対応した CDN が配信する圧縮後サイズです。非圧縮サイズは、Brotli を配信できないホストでも読み込めるかを判断するために使います。
| 対象 | 上限 |
|---|---|
| 非圧縮サイズ | ソフト目標 4.25 MiB / ハード上限 4.50 MiB |
| Brotli | ソフト目標 1216 KiB / ハード上限 1280 KiB |
直列版と pthread 版の各バイナリで、非圧縮サイズの上限を検査します。brotli コマンドが使える場合は Brotli サイズも検査し、使えない場合はその検査をスキップします。make size-check は両方のビルドを同じ上限で検査します。
サイズ上限の扱い
サイズ上限の違反はプロダクトの不具合と同じ扱いです。エンジンに依存を追加する前にビルドサイズを測り、サイズ増加に見合う機能か判断します。出荷後に修正するまで、転送量と読み込み時間の増加が残ります。
サイズを減らすには
上限に近づいたら、次の順で見ます。
- リンカーが保持するコード: 保持されるコードを測ります。関数呼び出し表から参照される関数族は、実際のワークブックで使わなくてもバイナリに含まれます。使用頻度の低い評価器の関数族(特殊関数、財務、
FORECAST.ETS、書式解析、GROUPBY/PIVOTBY、正規表現、データベース、回帰)と PCRE2 はサイズ優先でコンパイルしており、結果はビット単位で同一です。 - 依存の見直し: 不要な依存を除き、重複した実装をまとめます。スプレッドシート固有の小さな補助機能はリポジトリ内で実装します。
- ビルドフラグの調整: Emscripten の最適化、LTO、不要コードの除去を確認します。バインディングのグルーコードはサイズ優先、エンジン本体は
-O3でコンパイルします。 - 公開 API の縮小: 公開したシンボルはエンジンが依存を保持し続ける原因になります。内部 API にできるものは内部に置きます。
ビルド出力の読み方
make wasm wasm-threads
make size-checksize-check は現状の非圧縮サイズと Brotli サイズを出し、上限と比較します。両方を検査するには brotli をインストールしてください。圧縮できない場合、レポートは Brotli の検査をスキップします。CI と比較するときは、固定された Emscripten のバージョンを使ってください。PR を送る前にローカルで実行し、失敗を解消します。