Skip to content

perf(assets): compress asciicast responses - #839

Merged
ss-o merged 1 commit into
nextfrom
ss-o-compress-asciicast
Aug 14, 2026
Merged

perf(assets): compress asciicast responses#839
ss-o merged 1 commit into
nextfrom
ss-o-compress-asciicast

Conversation

@ss-o

@ss-o ss-o commented Aug 14, 2026

Copy link
Copy Markdown
Member

Summary

  • serve .cast terminal recordings as text/plain; charset=utf-8 instead of application/octet-stream
  • apply the MIME override to both Pages assets and the R2 fallback path
  • preserve existing cache, range, CORS, and content-signal headers

Impact

Cloudflare compresses text/plain responses but does not compress the current application/octet-stream responses. The homepage recording is 2,472,581 bytes raw and 207,708 bytes with gzip, reducing its transfer by about 91.6% (2.26 MB). Across all 15 recordings, the gzip baseline drops from 3,914,319 bytes to 351,807 bytes (91.0%).

Validation

  • pnpm exec eslint "functions/[[path]].ts"
  • pnpm wrangler:typecheck
  • pnpm build:en
  • local Pages runtime returned Content-Type: text/plain; charset=utf-8 for /cdn/cast/509113.cast while retaining immutable caching and the content-signal header

Serve terminal recordings as compressible text while preserving their existing cache and range behavior.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI lite review requested due to automatic review settings August 14, 2026 16:06
@github-actions

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 6.69 MB

ℹ️ View Unchanged
Filename Size
.docusaurus/globalData.json 13.6 kB
build/404.html 10.9 kB
build/assets/css/styles.********.css 154 kB
build/assets/js/0a6cf40a.********.js 36.9 kB
build/assets/js/0fd216e9.********.js 9.43 kB
build/assets/js/1a4e3797.********.js 86.7 kB
build/assets/js/1b355a49.********.js 8.52 kB
build/assets/js/1c9dc0d9.********.js 20.8 kB
build/assets/js/1df93b7f.********.js 16.7 kB
build/assets/js/1f391b9e.********.js 3.46 kB
build/assets/js/2e789afb.********.js 74.9 kB
build/assets/js/3a9ef7ca.********.js 439 B
build/assets/js/3dd168bd.********.js 17.4 kB
build/assets/js/3fc333ae.********.js 31 kB
build/assets/js/4edc808e.********.js 5.29 kB
build/assets/js/5c2e370e.********.js 487 B
build/assets/js/5e95c892.********.js 339 B
build/assets/js/6be15ea1.********.js 9.37 kB
build/assets/js/7aa168bf.********.js 6.38 kB
build/assets/js/7b9e4520.********.js 11.4 kB
build/assets/js/7bf4542e.********.js 18.4 kB
build/assets/js/7c5c12ac.********.js 9.68 kB
build/assets/js/7db88304.********.js 15.5 kB
build/assets/js/7efa72d3.********.js 7.22 kB
build/assets/js/09a4fe5a.********.js 64.8 kB
build/assets/js/9b0b65a6.********.js 11.2 kB
build/assets/js/12cfd228.********.js 7.17 kB
build/assets/js/14eb3368.********.js 10.6 kB
build/assets/js/38.********.js 99 B
build/assets/js/40c845af.********.js 31.4 kB
build/assets/js/47a5fc0a.********.js 174 B
build/assets/js/55b84506.********.js 12.3 kB
build/assets/js/56bcdb4b.********.js 10.3 kB
build/assets/js/57a8643e.********.js 14.3 kB
build/assets/js/0058b4c6.********.js 4.26 kB
build/assets/js/62b83c0f.********.js 8.01 kB
build/assets/js/66fe25d9.********.js 7.21 kB
build/assets/js/073fbc7c.********.js 15.8 kB
build/assets/js/78a4fd52.********.js 4.94 kB
build/assets/js/93c7665c.********.js 6.64 kB
build/assets/js/167d542a.********.js 12 kB
build/assets/js/175b49cb.********.js 39.4 kB
build/assets/js/221b35f7.********.js 17.9 kB
build/assets/js/263b985f.********.js 37 kB
build/assets/js/446e416b.********.js 9.56 kB
build/assets/js/573f7f56.********.js 3.29 kB
build/assets/js/621db11d.********.js 19.6 kB
build/assets/js/635ad0e8.********.js 490 B
build/assets/js/814f3328.********.js 151 B
build/assets/js/945b49d0.********.js 14.3 kB
build/assets/js/991ed628.********.js 17.1 kB
build/assets/js/1156.********.js 15 kB
build/assets/js/2137bacb.********.js 8.88 kB
build/assets/js/2512.********.js 452 B
build/assets/js/2898.********.js 1.27 kB
build/assets/js/2980.********.js 5.74 kB
build/assets/js/3202.********.js 443 kB
build/assets/js/3894e54f.********.js 21.9 kB
build/assets/js/4812.********.js 10.3 kB
build/assets/js/5251.********.js 27.4 kB
build/assets/js/6091.********.js 175 kB
build/assets/js/6459.********.js 102 B
build/assets/js/6619.********.js 1.05 kB
build/assets/js/8406.********.js 938 B
build/assets/js/9980.********.js 102 B
build/assets/js/36994c47.********.js 171 B
build/assets/js/98822c48.********.js 12.9 kB
build/assets/js/4382960e.********.js 9.82 kB
build/assets/js/8357758b.********.js 19.7 kB
build/assets/js/8449122f.********.js 56.4 kB
build/assets/js/17896441.********.js 2.26 kB
build/assets/js/35475145.********.js 451 B
build/assets/js/39724810.********.js 14 kB
build/assets/js/70442256.********.js 36 kB
build/assets/js/a7bd4aaa.********.js 687 B
build/assets/js/a21c20db.********.js 45 kB
build/assets/js/a44cb192.********.js 38.5 kB
build/assets/js/a821d7a1.********.js 14.9 kB
build/assets/js/a94703ab.********.js 11.4 kB
build/assets/js/a7456010.********.js 173 B
build/assets/js/aba21aa0.********.js 172 B
build/assets/js/acecf23e.********.js 193 B
build/assets/js/b14e0f74.********.js 15.8 kB
build/assets/js/b28a5f0c.********.js 21 kB
build/assets/js/b4616e61.********.js 18.6 kB
build/assets/js/bc6be8dd.********.js 438 B
build/assets/js/bc7db166.********.js 22.8 kB
build/assets/js/c7b90d82.********.js 23.1 kB
build/assets/js/c141421f.********.js 172 B
build/assets/js/cf55cfec.********.js 458 B
build/assets/js/d5c68bbd.********.js 42.5 kB
build/assets/js/d40a1e80.********.js 9.97 kB
build/assets/js/d66fa391.********.js 32.4 kB
build/assets/js/d2436a2b.********.js 8.85 kB
build/assets/js/db8d5f16.********.js 11.6 kB
build/assets/js/e9ebadb9.********.js 12.5 kB
build/assets/js/e9814e3e.********.js 7.49 kB
build/assets/js/e76149f9.********.js 9.46 kB
build/assets/js/e0719818.********.js 174 B
build/assets/js/ea82e367.********.js 13.7 kB
build/assets/js/eb7ebca6.********.js 30.5 kB
build/assets/js/ebed0d07.********.js 5.35 kB
build/assets/js/ec281f2e.********.js 15.8 kB
build/assets/js/eecb7248.********.js 2.94 kB
build/assets/js/ef8b811a.********.js 313 B
build/assets/js/f7eabd91.********.js 8.77 kB
build/assets/js/f077d5db.********.js 33.4 kB
build/assets/js/f1028ce8.********.js 465 B
build/assets/js/f13553a8.********.js 436 B
build/assets/js/f53487f0.********.js 12.6 kB
build/assets/js/fd2064b2.********.js 11.5 kB
build/assets/js/fedb50c8.********.js 44.7 kB
build/assets/js/main.********.js 518 kB
build/assets/js/runtime~main.********.js 8.21 kB
build/blog/authors.html 11.5 kB
build/community.html 22.6 kB
build/community/category/-collection.html 22.5 kB
build/community/category/-gallery-of-invocations.html 17.5 kB
build/community/contributing.html 24.6 kB
build/community/contributing/contributing_docs.html 38.4 kB
build/community/contributing/contributing_to_zi.html 32 kB
build/community/contributing/getting_started.html 33.7 kB
build/community/contributing/project_management.html 35.5 kB
build/community/contributors.html 26.8 kB
build/community/gallery/collection.html 24.2 kB
build/community/gallery/collection/completions.html 76.4 kB
build/community/gallery/collection/plugins.html 84.2 kB
build/community/gallery/collection/programs.html 188 kB
build/community/gallery/collection/services.html 24.8 kB
build/community/gallery/collection/snippets.html 24.5 kB
build/community/gallery/collection/themes.html 63.5 kB
build/community/zsh_handbook.html 160 kB
build/community/zsh_lint.html 95.3 kB
build/community/zsh_plugin_standard.html 108 kB
build/community/zunit.html 28.5 kB
build/community/zunit/zunit-assertions.html 60.9 kB
build/community/zunit/zunit-ci.html 43.5 kB
build/community/zunit/zunit-configuration.html 31.7 kB
build/community/zunit/zunit-installation.html 33.2 kB
build/community/zunit/zunit-running-tests.html 29.9 kB
build/community/zunit/zunit-test-syntax.html 43.8 kB
build/docs.html 20.9 kB
build/docs/category/-getting-started.html 17.8 kB
build/docs/category/-guides.html 18.7 kB
build/docs/category/️-syntax.html 19.8 kB
build/docs/code.html 20.5 kB
build/docs/getting_started/installation.html 62.1 kB
build/docs/getting_started/migration.html 87.5 kB
build/docs/getting_started/overview.html 85.9 kB
build/docs/guides/benchmark.html 56.8 kB
build/docs/guides/commands.html 97.5 kB
build/docs/guides/customization.html 85.8 kB
build/docs/guides/syntax/bindkey.html 38.3 kB
build/docs/guides/syntax/for.html 70.4 kB
build/docs/guides/syntax/ice-modifiers.html 47.8 kB
build/docs/guides/syntax/standard.html 139 kB
build/ecosystem.html 20.9 kB
build/ecosystem/annexes/bin-gem-node.html 114 kB
build/ecosystem/annexes/default-ice.html 31 kB
build/ecosystem/annexes/eval.html 37.7 kB
build/ecosystem/annexes/linkbin.html 31.6 kB
build/ecosystem/annexes/meta-plugins.html 38.9 kB
build/ecosystem/annexes/overview.html 63.4 kB
build/ecosystem/annexes/patch-dl.html 27.5 kB
build/ecosystem/annexes/readurl.html 40 kB
build/ecosystem/annexes/rust.html 42.2 kB
build/ecosystem/annexes/submods.html 24.2 kB
build/ecosystem/annexes/unscope.html 40.6 kB
build/ecosystem/category/-annexes.html 23.9 kB
build/ecosystem/category/-packages.html 17.2 kB
build/ecosystem/category/️-plugins.html 28.3 kB
build/ecosystem/packages/synopsis.html 35.3 kB
build/ecosystem/packages/usage.html 72.3 kB
build/ecosystem/plugins/diff-so-fancy.html 39.2 kB
build/ecosystem/plugins/f-sy-h.html 118 kB
build/ecosystem/plugins/h-s-mw.html 51.8 kB
build/ecosystem/plugins/zbrowse.html 27.2 kB
build/ecosystem/plugins/zconvey.html 31.6 kB
build/ecosystem/plugins/zi-console.html 34.7 kB
build/ecosystem/plugins/zprompts.html 29 kB
build/ecosystem/plugins/zsh-cmd-architect.html 36.4 kB
build/ecosystem/plugins/zsh-editing-workbench.html 32 kB
build/ecosystem/plugins/zsh-modules.html 38.2 kB
build/ecosystem/plugins/zsh-navigation-tools.html 75.8 kB
build/ecosystem/plugins/zsh-select.html 39.4 kB
build/ecosystem/plugins/zsh-unique-id.html 31.1 kB
build/ecosystem/plugins/zui.html 173 kB
build/ecosystem/plugins/zzcomplete.html 28.6 kB
build/index.html 21.5 kB
build/legal/CODE_OF_CONDUCT.html 20.6 kB
build/legal/PRIVACY.html 32.7 kB
build/search.html 16.2 kB

compressed-size-action

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying zsh with  Cloudflare Pages  Cloudflare Pages

Latest commit: 0ed5b24
Status: ✅  Deploy successful!
Preview URL: https://55b68aff.zsh.pages.dev
Branch Preview URL: https://ss-o-compress-asciicast.zsh.pages.dev

View logs

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Cloudflare Pages catch-all function to ensure .cast (asciicast) terminal recordings are served as text/plain; charset=utf-8 instead of application/octet-stream, enabling Cloudflare’s automatic compression for significantly smaller transfers while preserving existing caching, range, and CORS behavior.

Changes:

  • Introduces a shared header helper that always applies Content-Signal and conditionally overrides Content-Type for .cast paths.
  • Applies the .cast MIME override consistently for both Pages-served assets (context.next()) and the R2 fallback response path.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ss-o
ss-o merged commit a9c50f4 into next Aug 14, 2026
10 checks passed
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