diff --git a/CHANGELOG.md b/CHANGELOG.md index 372652e..5e6b7c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,17 @@ raylight 4卡跑 FSDP 集群时长期 100% GPU 利用率,这个 HTTP 请求要 `/data/models/minimax-h3/console/`,`systemctl restart h3-console-lan h3-console-public` 生效(两个 systemd 单元都是 `active`)。 +**同一天顺带发现的第二个问题**:用户在 Chrome Network 面板发现每次刷新页面要拉 46 个 +请求、9237KB。排查发现列表页缩略图直接用参考图原图(`/assets/*`,上传时的原始分辨率, +实测单张 1.4~1.7MB),而且 `StaticFiles` 挂载没给任何 `Cache-Control`——每次刷新页面, +即使是同一批任务、同一张参考图,浏览器也要重新下载一遍。文件名是 +`{uuid}__{原名}.ext`(见 `upload_asset`),内容写完不会再变,同一个 URL 永远对应同一份 +字节,可以放心标 immutable。改法:`StaticFiles` 子类化,给 `/assets/*` 的 200 响应加 +`Cache-Control: public, max-age=31536000, immutable`,一行改动,重复刷新直接不再发请求。 +**没解决的部分**(标了 ponytail 留着):缩略图本身还是原图原尺寸,immutable 缓存只省得掉 +"重复"下载,省不掉页面第一次打开时的下载量——真影响到人再加 PIL 服务端生成小图(`server.py` +已经在用 PIL 校验上传,加缩略图生成不用新依赖)。 + ## 2026-09-03 — raylight 修复中文参考文件名 UnicodeEncodeError + 排队优先级/插队 + 重启不再清空队列 **触发**:任务 `f2de718e1e30`(ref2va,带一个中文文件名的参考视频)秒失败,报 diff --git a/h3-console/server.py b/h3-console/server.py index 2152664..8a175f7 100644 --- a/h3-console/server.py +++ b/h3-console/server.py @@ -181,7 +181,20 @@ def _public_base() -> str: "这个地址会被服务器上的 api.py worker 反向拉取,见 README。") -app.mount(f"{BASE_PATH}/assets", StaticFiles(directory=str(ASSETS)), name="assets") +# 2026-09-09:文件名是 {uuid}__{原名}.ext(见 upload_asset),内容写完就不会再变, +# 同一个 URL 永远对应同一份字节——可以放心标 immutable。之前没有 Cache-Control, +# 列表页每条任务都直接用原图当缩略图,刷新一次页面这些图就要重新传一遍。 +# ponytail: 缩略图本身还是原图原尺寸(没有服务端生成小图),immutable 缓存能省掉 +# "重复"下载,省不掉"第一次"下载太大——参考图动辄1-2MB,真影响到人再加 PIL 缩略图。 +class CachedStaticFiles(StaticFiles): + async def get_response(self, path, scope): + response = await super().get_response(path, scope) + if response.status_code == 200: + response.headers["Cache-Control"] = "public, max-age=31536000, immutable" + return response + + +app.mount(f"{BASE_PATH}/assets", CachedStaticFiles(directory=str(ASSETS)), name="assets") # ---------------- 生成任务:console 自己是排队的主人,gateway.py 只是"当前有空的执行者" ----------------