Expand description
画像取得・デコードの予算判定(描画をブロックしないため)。
仕様と実測は spec/webfont_loading.md を参照(フォントと同じ方針)。
§なぜ必要か
【2026-07-30 実測】ネットワークが健全になった結果、
.hero の背景写真(3,724,477 バイト)を実際に取得するようになり、
描画が 120 秒たっても終わらなくなった。
それまで表示できていたのは取得が失敗して先へ進めていたため。
§判定は「圧縮サイズ」ではなく「展開後の画素数」で行う
woff2 で同じ轍を踏んだ。102KB の woff2 が Brotli 展開で OOM した。 圧縮形式は展開後のサイズが桁違いになりうるので、 可能なら展開後の大きさを見る。JPEG は SOF マーカーから幅と高さを読める。
グローバル状態にもハードウェアにも依存しない純粋ロジックのみ。
Enums§
- Image
Decision - 判定結果。
- Skip
Reason - 諦める理由。黙って無視せず記録するために型で持つ。
Constants§
- MAX_
IMAGE_ BYTES - 取得を許容する最大バイト数(画素数が読めない形式向けの保険)。
- MAX_
PIXELS - デコードを許容する最大画素数。 1 画素 4 バイトなので 2M 画素で 8MB のバッファになる。
Functions§
- decide_
by_ bytes - 大きさが不明な段階で、圧縮サイズだけから判断する。
- decide_
by_ dimensions - 展開後の大きさが分かっている画像を受け入れてよいか。
- describe
- 諦めた理由を人が読める文字列にする(ログ用)。
- jpeg_
dimensions - JPEG の SOF マーカーから (幅, 高さ) を読む。
- pixel_
count - 幅×高さから画素数を求める。オーバーフローしない。