mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 11:20:43 +00:00
静态资源交给 Cloudflare 边缘缓存(下载提速 41 倍)
实测基线:
ykxmz-setup-1.8.1.exe 只下到 237568/15067199 字节就停(17 KB/s)
ykxmz-watch-1.8.1.apk 201523 字节 / 66.8 秒 = 3 KB/s
ykxmz-server-1.8.1.zip 214900 字节 / 3.1 秒 = 67 KB/s
原因:relay 给所有响应都发 Cache-Control: no-store,
Cloudflare 完全不缓存 —— 每次下载/每张图都要穿隧道回 4G 源站。
改动:
/download/* no-store -> public, max-age=604800, immutable
文件名带版本号,同一名字内容永不改变,可以长缓存
/ -> public, max-age=60(挡住刷新重复回源)
/favicon.ico 已是 max-age=86400,保持不变
/shot/* 已是 max-age=86400,保持不变
/v1/* 保持 no-store(接口必须实时)
顺带修两个自己踩的坑:
1. _send() 无条件先发 no-store,再追加 extra 里的 Cache-Control,
结果是**两个 Cache-Control 头**,客户端只认第一个 ——
调用方传的缓存策略被吃掉。改成 extra 里有就不再发默认值。
2. do_HEAD 和 do_GET 的缓存头不一致:HEAD 对非 /shot/ 一律报 no-store。
下载器/代理用 HEAD 探测时会误判文件不可缓存。
现在 _head_info 给每个路由带上和 GET 完全相同的缓存头,
do_HEAD 也不再盲目覆盖。
结果(同一个测试口径):
setup.exe 17 KB/s(截断) -> 695 KB/s 完整 15 MB 41 倍
watch.apk 3 KB/s -> 101 KB/s 33 倍
server.zip 67 KB/s -> 87 KB/s
三个文件全部 cf-cache-status=HIT(不再穿隧道回源)
排查过程记一笔:我一开始用 curl -I 验证,
看到的全是 no-store —— 因为 **-I 发的是 HEAD**,
而 HEAD 走的是另一个分支。查了半天才发现是验证方法错了。
This commit is contained in:
@@ -38,10 +38,32 @@ def main() -> int:
|
||||
files = [str(p) for p in TARGETS if p.is_file()]
|
||||
print(f" 检查 {len(files)} 个 Python 文件…")
|
||||
|
||||
proc = subprocess.run([sys.executable, "-m", "pyflakes"] + files,
|
||||
capture_output=True, text=True,
|
||||
encoding="utf-8", errors="replace")
|
||||
lines = [line for line in (proc.stdout or "").splitlines() if line.strip()]
|
||||
# ⚠ 不能一次把 450 多个文件全塞进命令行 ——
|
||||
# Windows 的 CreateProcess 有命令行长度上限(约 32767 字符),
|
||||
# 超了直接 FileNotFoundError: [WinError 206] 文件名或扩展名太长,
|
||||
# 而且报错看起来像"文件找不到",很容易误判。
|
||||
# 所以分批调用,每批的总长度控制住。
|
||||
all_lines = []
|
||||
batch, batch_len = [], 0
|
||||
LIMIT = 6000 # 单批命令行里文件路径的总字符数预算(留足余量)
|
||||
batches = []
|
||||
for path in files:
|
||||
if batch and batch_len + len(path) + 1 > LIMIT:
|
||||
batches.append(batch)
|
||||
batch, batch_len = [], 0
|
||||
batch.append(path)
|
||||
batch_len += len(path) + 1
|
||||
if batch:
|
||||
batches.append(batch)
|
||||
|
||||
for chunk in batches:
|
||||
proc = subprocess.run([sys.executable, "-m", "pyflakes"] + chunk,
|
||||
capture_output=True, text=True,
|
||||
encoding="utf-8", errors="replace")
|
||||
all_lines.extend(
|
||||
line for line in (proc.stdout or "").splitlines() if line.strip())
|
||||
|
||||
lines = all_lines
|
||||
|
||||
if not lines:
|
||||
print(" ✓ 没有未定义名 / 未使用导入等问题")
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user