Skip to content

Instantly share code, notes, and snippets.

@myakura
Created January 22, 2026 14:16
Show Gist options
  • Select an option

  • Save myakura/f4c0df2053e11ee8e03ebec129e39fd9 to your computer and use it in GitHub Desktop.

Select an option

Save myakura/f4c0df2053e11ee8e03ebec129e39fd9 to your computer and use it in GitHub Desktop.

Web Performance Calendar 2025を読む

https://calendar.perfplanet.com/2025/ を読みます

Performance Calendarについて

あとで

どんなのがあるか

あとで

Improve TTFB and UX with HTTP streaming

https://calendar.perfplanet.com/2025/improve-ttfb-and-ux-with-http-streaming/

あまり使われていないHTTPのストリーミング機能を使えばTTFBを短くできる。

Mastraフレームワークではawait db.execute()みたいなものの代わりにdb.stream()というAsyncIterableを返す実装でHTTTPストリーミングを活用している。

Exploring Large HTML Documents On The Web

https://calendar.perfplanet.com/2025/exploring-large-html-documents-on-the-web/

HTML文書は基本的には小さいが、中にはとてつもなくでかいのがある。どんな理由でHTMLがでかくなってしまったのかを探る。

インラインの画像。大きなファイルサイズの画像が埋め込まれていたり、小さな埋め込みアイコンが数百もあるもの、レスポンシブイメージが埋め込まれているもの、SVGがPNGを埋め込んでいるもの、などなど。

インラインのCSS。基本的には埋め込み画像によるものが多いが、長すぎるセレクタによってファイルサイズが膨れてしまうことも(ただしgzipがきくので転送量は小さくなったりする)

インラインフォント。1つや2つならいいが、複数個あると大変。

JavaScriptフレームワークのintiial renderに使うコードがばかでかい。ローカルの開発環境ではinitialのデータは小さいが、プロダクションのDBなどからだとハイドレーションステートが膨らむ。

JSONの中に画像がインラインで埋め込まれていても大きくなるし、JSONのツリーを辿っていくとHTML→JSON→...HTML→JSONなんてパターンもあった。

HTMLがでかくなることの何が問題か?HTMLはブラウザでプライオリティが高く設定されるので、ハイドレーション用のJSがあると、レンダーブロッキングなCSSやフォントよりも先に読み込まれ、レンダーブロッキングなリソースの読み込みに悪影響が出る。

HTMLがでかくなることの何が問題か?HTMLはブラウザでプライオリティが高く設定されるので、ハイドレーション用のJSがあると、レンダーブロッキングなCSSやフォントよりも先に読み込まれ、レンダーブロッキングなリソースの読み込みに悪影響が出る。 HTMLがでかくなることの何が問題か?HTMLはブラウザでプライオリティが高く設定されるので、ハイドレーション用のJSがあると、レンダーブロッキングなCSSやフォントよりも先に読み込まれ、レンダーブロッキングなリソースの読み込みに悪影響が出る。

CPUの処理速度によっても影響が出る。MacBookだとそこまで問題ないかもしれないが、ローエンドのスマホだと影響が出る。

パフォーマンスを低下させる要因はHTMLよりも他のものがでかいかもしれないが、それでもHTMLの大きさはパフォーマンスに影響する。LCPなど。HTMLのサイズが増えていかないようにCIとかでチェックしようね。

Non-blocking cross-browser image rendering on the canvas

https://calendar.perfplanet.com/2025/non-blocking-image-canvas/

CanvasのdrawImage()でメインスレッドを止めない方法を探る。どのブラウザでもいい感じに動く方法を探すのが大変という話。

  • image.decoding = "async"だけ→Chrome, Firefox, Safariでブロック
  • image.decode()→FirefoxのみOK
  • image.decode()とOffscreenCanvas→FirefoxのみOK
  • image.decode()からcreateImageBitmap()→FirefoxとSafariでOK
  • image.blob()からcreateImageBitmap()→ChromeのみOK
  • image.blob()からcreateImageBitmap()をWorkerで→ChromeとSafariでOK
  • 結局UA判別でdecodeからcIBとblobからcIBを振り分けて対応

仕様ではdecode()のみでうまくいくはずだが、ChromiumとWebKitではそうなってない。

NoLoJS: Reducing the JS Workload with HTML and CSS

https://calendar.perfplanet.com/2025/nolojs-reducing-js-workload-html-css/

JSで実装してたUIパターンも今だとHTML/CSSでできたりするという紹介。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment