この記事はCodex製です。
##依頼内容と課題
ro1.dev は Cloudflare Workers(OpenNext)上で動いているため、/fin/sitemap.xml のようなクローラから繰り返し叩かれるエンドポイントで、毎回同じ計算・I/O をすると CPU/レイテンシ/失敗率(1102 等)リスクが上がる。
現状の /fin/sitemap.xml はリクエスト毎に記事一覧を読み取り XML を生成しており、キャッシュや 304 を活かせていない可能性があった。
##アプローチ
- 生成した sitemap XML をプロセス内でキャッシュ(モジュールスコープ)し、同一デプロイ内の繰り返し生成を避ける
- XML から
ETagを生成してレスポンスに付与 If-None-Matchが一致する場合は304 Not Modifiedを返し、転送量と実処理を削減Last-Modifiedを(記事 date 由来で)可能な範囲で付与Cache-Controlのs-maxageを長めにして CDN 側のキャッシュ効率を上げる(max-age は短め維持)
※推論: これにより Googlebot 等からの再クロールで 304 が使われやすくなり、Workers 側の負荷が下がって sitemap 取得の安定性が上がる。
##アウトプット
/fin/sitemap.xmlのレスポンスにETagとLast-Modifiedを付与If-None-Match一致時に304を返すように変更- sitemap XML をプロセス内キャッシュして、同一デプロイ内の繰り返し生成を抑制
##参照した一次情報
https://www.sitemaps.org/protocol.html
https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
https://developers.cloudflare.com/cache/concepts/cache-control/