Skip to content

Conversation

@ornsteinfilip
Copy link
Member

Účel

Optimalizace výkonu webů pomocí správného nastavení cache headers, které umožní efektivní využití Cloudflare CDN jako primární cache vrstvy před aplikací.

@ornsteinfilip ornsteinfilip changed the base branch from master to petr/tiptap September 12, 2025 06:02
@ornsteinfilip
Copy link
Member Author

Rozšířil jsem metody kolem set_cache_control_headers. Vše maximálně mimo core code.

HTTP Cache Headers - Fáze 1 implementace

Co bylo implementováno:

  • Základní cache headers systém ve Folio s Cache-Control, ETag, Last-Modified
  • Generator pro instalaci: rails g folio:cache_headers vytvoří initializer
  • Jednotné 60s default konfigurovatelné TTL pro všechny veřejné stránky
  • Explicit record control: kontrolery musí vědomě předat record: @model pro ETag/Last-Modified
  • Ošetření /console a /users pro privívátní no cache přístup
  • Ošetření pro přihlášeného uživatele, aby neinterferovaly stejné URL pro přihlášeného i nepřihlášeního v externí cache pomocí rozšíření klíče o Vary: X-Auth-State v hodnotách anonymous, nebo authenticated

Principy fungování:

  • Automatické základní headers: after_action v Folio::ApplicationControllerBase nastaví Cache-Control: public, max-age=15, pokud je zapnut Rails.application.config.folio_cache_headers_enabled
  • Bezpečnost first: Console/admin dostávají private, no-store, nepublikované záznamy dostávají no-store
  • Flexible timestamp columns: Projekt po snadné konfiguraci používá [:updated_at, :published_at, :revised_at] pro Last-Modified a eTag nastavení

Klíčové soubory:

  • folio/app/controllers/concerns/folio/http_cache/headers.rb - hlavní logika
  • folio/lib/generators/folio/cache_headers/ - installer

Poznámka k nasazení na projektu, kterou zatím nebudu řešit přímo ve Folio
Na devu v projektu se to ideálně zapíná a vypíná společně s rails dev:cache a vypne se Rack::MiniProfiler (protože přenastavoval cache headers).

@ornsteinfilip ornsteinfilip merged commit 28830d1 into petr/tiptap Sep 12, 2025
jzlamal pushed a commit that referenced this pull request Oct 29, 2025
* feat(cache): add initial configuration for cache headers

* feat(http_cache): implement cache control headers concern

* feat(http_cache): fix cache headers with freshness and vary support

* feat(http_cache): enhance cache control logic

* feat(cache_headers): add generator for cache headers initializer and usage documentation

* feat(http_cache): refine cache control logic and enhance timestamp handling

* fix(tests): update cache control assertions in error and pages controller tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants