前端开发
用 Tigris 部署静态资源并配置 CDN 缓存:解决…
当需要把 CSS、JS、字体或构建产物部署到 Tigris 公共 bucket,并用全局 CDN、内容哈希和 Cache-Control 提供快速静态资源时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 Tigris 部署静态资源并配置 C特定
解决思路
- 如果尚未安装 Tigris CLI,先运行 `tigris help || npm install -g @tigrisdata/cli`;如果需要安装,告诉用户:"我正在安装 Tigris CLI(`@tigrisdata/cli`),以便使用 Tigris 对象存储。"
- 使用 Tigris public bucket:它自动从最近的全球边缘节点提供文件,无需单独配置 CDN。
- 按内容哈希构建资源(例如 `main-abc123.js`)。
- 将资源上传到 public Tigris bucket。
- 设置 `Cache-Control: public, max-age=31536000, immutable`。
- 将应用的资源 URL 指向 Tigris bucket。
- 对不可变、带哈希的资源(CSS、JS bundles)设置 `Cache-Control: public, max-age=31536000, immutable`。
- 对可变资源(manifest 文件、`index.html`)设置 `Cache-Control: public, max-age=0, must-revalidate`。
- 对字体设置 `Cache-Control: public, max-age=31536000, immutable`。
- 通过 CLI 设置头部:`tigris cp dist/main-abc123.js t3://my-assets/main-abc123.js --cache-control "public, max-age=31536000, immutable" --content-type "application/javascript"`。
- 通过 SDK 设置头部:使用 `@tigrisdata/storage` 的 `put`,例如 `await put("assets/main-abc123.js", fileBuffer, { access: "public", contentType: "application/javascript" });`。
- 使用通用上传脚本 `scripts/deploy-assets.sh`:设置 `BUCKET="my-app-assets"`、`BUILD_DIR="dist"`;用 `tigris cp "$BUILD_DIR/" "t3://$BUCKET/" -r --cache-control "public, max-age=31536000, immutable"` 上传带哈希资源;输出 `Assets deployed to t3://$BUCKET/`。
- Next.js:阅读 `./resources/nextjs.md` 获取 assetPrefix 配置和部署脚本。
- Remix:阅读 `./resources/remix.md` 获取 Vite 配置和部署脚本。
- Express:阅读 `./resources/express.md` 获取静态重定向模式。
- Rails:阅读 `./resources/rails.md` 获取 Sprockets/Propshaft 资源同步方法。
- Django:阅读 `./resources/django.md` 获取使用 S3 backend 的 collectstatic 方法。
- Laravel:阅读 `./resources/laravel.md` 获取 Vite/Mix 资源上传方法。
- 文件名内容哈希:例如 `main-abc123.js`;当构建工具生成哈希文件名(Vite、Webpack)时使用。
- 查询字符串:例如 `main.js?v=abc123`;当遗留系统没有哈希文件名时使用。
- 目录版本化:例如 `/v2/assets/main.js`;用于重大版本变更。
- 大多数现代构建工具(Vite、Webpack、esbuild)默认生成内容哈希文件名;将它们与 `immutable` 缓存头一起使用以获得最佳性能。
- 始终:为静态资源使用 public bucket。
- 始终:对带哈希资源设置 `Cache-Control: immutable`。
- 始终:使用内容哈希文件名。
- 始终:在构建后上传,而不是每次请求时上传。
- 绝不:在生产环境中通过应用服务器提供静态资源(使用 Tigris CDN)。
- 绝不:对可变文件名设置长缓存时间。
- 绝不:忘记更新框架中的资源 URL 配置。
- 相关技能:`tigris-egress-optimizer` 用于降低带宽成本。
- 相关技能:`tigris-lifecycle-management` 用于清理旧资源版本。
- 官方文档:Tigris `https://www.tigrisdata.com/docs/`。
适用边界 · 注意事项
- 不使用 Tigris 对象存储、或无法创建 public bucket 时。
- 仍希望在生产环境中由应用服务器直接提供静态资源时。
- 资源文件名可变且无法做内容哈希时,不要对文件名使用 immutable 长缓存,应改用 `must-revalidate`。