Skip to main content

Module font_budget

Module font_budget 

Source
Expand description

Web フォント取得の可否判定(描画をブロックしないための予算)。

仕様・不変条件・実測データは spec/webfont_loading.md を参照。

§なぜ必要か

L1 の排他制御を直してネットワークが安定した結果、 5.3MB の Noto Sans JP を実際にダウンロードするようになり、 その完了を待って描画が始まらなくなった(実測)。 実サイトは font-display: swap を指定しており、 読み込みを待たずに代替フォントで描画するのが意図である。

グローバル状態にもハードウェアにも依存しない純粋ロジックのみで構成する。

Enums§

BudgetError
引数が不正だった場合のエラー。
FallbackReason
代替フォントを使う理由。黙って無視せず記録するために型で持つ。
FetchOutcome
フォント取得の結果。
FontDecision
取得を試みるかどうかの判定結果。

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
この結果を「連続失敗」としてカウントすべきか。