Skip to content

Perf: nincs tömörítés a dinamikus válaszokon #72

Description

@Xentinus

Jelenség

A pipeline-ban nincs response compression middleware (AddResponseCompression / UseResponseCompression egyik hostban sem szerepel).

Amit ez nem érint: a statikus fájlokat a MapStaticAssets() szolgálja ki (HostPipelineExtensions), ami a build során előállított brotli/gzip változatokat adja vissza tartalom-egyeztetéssel — tehát a JS és CSS bundle már tömörítve megy.

Amit érint, az a dinamikus válasz, mert az nem statikus fájl:

  • az olvasó API JSON-válaszai (works, skills, experiences, about, attachments metaadat) — a rich text testekkel ezek a legnagyobb szöveges válaszok az oldalon
  • a SpaShell-lel összeállított HTML (Response.WriteAsync, nem SendFileAsync)
  • sitemap.xml, sitemap.json, robots.txt

A Cloudflare a látogató felé komprimál, tehát a végfelhasználói hatás korlátozott. Ami valóban nyer vele: az origin → cloudflared hop (ugyanazon a gépen fut, de a szerializálás és a másolás megvan), és minden olyan kérés, ami nem az edge-en keresztül jön (health check, monitor, közvetlen találat). A #58 (edge-cache) után ez tovább csökken, mert a HTML-t az edge adja.

Ezért ez kis nyereségű, kis munkájú tétel — nem sürgős, de egyszerű.

Javaslat

  1. AddResponseCompression brotli + gzip providerrel, EnableForHttps = true, és a UseResponseCompression a pipeline-ban a MapStaticAssets() után, hogy a statikus kiszolgálás előre lefordított változatait ne duplikálja.
  2. MIME-típusok: application/json, text/html, application/xml, text/plain. Képeket (image/*) ne — az attachment válaszok már tömörített formátumok, az újratömörítés csak CPU.
  3. Tömörítési szint: brotli esetén ne a maximum (SmallestSize) — VPS-en a CPU a szűkebb erőforrás, a Fastest vagy az alapérték a helyes választás dinamikus válaszra.
  4. Biztonsági megjegyzés: a tömörítés és a titkosítás együtt elvben BREACH-jellegű oldalcsatornát nyit, ha a válasz egyszerre tartalmaz titkot és támadó által befolyásolt szöveget. Itt a publikus API-válaszok nyilvános tartalmat adnak, és nincs süti-alapú session (az admin oldalt a Cloudflare Access védi), tehát ez nem érinti — de a döntést érdemes egy kommentben rögzíteni, mint a projekt többi biztonsági döntését.
  5. Mérés: a works válasz mérete előtte/utána, curl -H "Accept-Encoding: br" -w "%{size_download}".

Érintett fájlok

  • PortfolioCMS.Core/Extensions/CoreStartupExtensions.cs (regisztráció)
  • PortfolioCMS.Core/Extensions/HostPipelineExtensions.cs (a middleware helye a sorrendben)
  • PortfolioCMS.Tests/HostPipelineTests.cs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions