Expand description
Web フォント取得の可否判定(描画をブロックしないための予算)。
仕様・不変条件・実測データは spec/webfont_loading.md を参照。
§なぜ必要か
L1 の排他制御を直してネットワークが安定した結果、
5.3MB の Noto Sans JP を実際にダウンロードするようになり、
その完了を待って描画が始まらなくなった(実測)。
実サイトは font-display: swap を指定しており、
読み込みを待たずに代替フォントで描画するのが意図である。
グローバル状態にもハードウェアにも依存しない純粋ロジックのみで構成する。
Enums§
- Budget
Error - 引数が不正だった場合のエラー。
- Fallback
Reason - 代替フォントを使う理由。黙って無視せず記録するために型で持つ。
- Fetch
Outcome - フォント取得の結果。
- Font
Decision - 取得を試みるかどうかの判定結果。
Constants§
- MAX_
FONTS_ PER_ PAGE - 1 ページで取得を試みる Web フォントの本数上限。 上限を超えたら以降は代替フォントを使う。
- MAX_
FONT_ BYTES - 1 フォントあたりの取得サイズ上限。 これを超えるものは諦めて内蔵フォントで描く。 実サイトの Noto Sans JP は 5.3MB あり、この OS で同期的に扱うのは非現実的。
Functions§
- decide
- このフォントを取得しに行くか判定する。
- describe
- 代替へ倒す理由を人が読める文字列にする(ログ用)。
- exceeds_
size_ limit - 取得したバイト数が上限を超えているか。
- should_
count_ as_ failure - この結果を「連続失敗」としてカウントすべきか。